Где найти генератор GUID?

User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Где найти генератор GUID?

Post by Win32nipuh »

Есть задача - для существующей системы Windows клиент - MS SQL Server база сделать ткскыть "light" версию Windows клиент - Linux-PostgreSQL база.
Так вот в существующей базе на MS SQL Server используется функция newid() для значений по умолчанию при добавлении записей.

Есть ли в природе генераторы гуидов для PostgreSQL или для линукса, которые можно было бы приспособить для PostgreSQL?
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Re: Где найти генератор GUID?

Post by f_evgeny »

Win32nipuh wrote:Есть задача - для существующей системы Windows клиент - MS SQL Server база сделать ткскыть "light" версию Windows клиент - Linux-PostgreSQL база.
Так вот в существующей базе на MS SQL Server используется функция newid() для значений по умолчанию при добавлении записей.

Есть ли в природе генераторы гуидов для PostgreSQL или для линукса, которые можно было бы приспособить для PostgreSQL?

Тип данных serial не подойдет?
Дальше, все будет только хуже. Оптимист.
User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Re: Где найти генератор GUID?

Post by Win32nipuh »

f_evgeny wrote:
Win32nipuh wrote:Есть задача - для существующей системы Windows клиент - MS SQL Server база сделать ткскыть "light" версию Windows клиент - Linux-PostgreSQL база.
Так вот в существующей базе на MS SQL Server используется функция newid() для значений по умолчанию при добавлении записей.

Есть ли в природе генераторы гуидов для PostgreSQL или для линукса, которые можно было бы приспособить для PostgreSQL?

Тип данных serial не подойдет?


проблема в том, что нужно не замену найти, а еще и данные перенести, некоторые гуиды известны еще и в приложении, избавиться не удается.
Michael Popov
Уже с Приветом
Posts: 991
Joined: 09 Sep 2001 09:01
Location: The Earth

Post by Michael Popov »

Сколько там в GUID байтов ? 16 ? Два раза вызываешь gettimeofday и заполняешь буффер содержимым struct timeval (8+8 ). Уникальность - good enough :)
Best regards,

Michael Popov
Michael Popov
Уже с Приветом
Posts: 991
Joined: 09 Sep 2001 09:01
Location: The Earth

Re: Где найти генератор GUID?

Post by Michael Popov »

Win32nipuh wrote:Есть ли в природе генераторы гуидов для PostgreSQL или для линукса, которые можно было бы приспособить для PostgreSQL?


Win32nipuh wrote:проблема в том, что нужно не замену найти, а еще и данные перенести, некоторые гуиды известны еще и в приложении, избавиться не удается.


Так чего собственно надо-то ? Формулировка вопроса противоречива.
Best regards,

Michael Popov
User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Re: Где найти генератор GUID?

Post by Win32nipuh »

Michael Popov wrote:
Win32nipuh wrote:Есть ли в природе генераторы гуидов для PostgreSQL или для линукса, которые можно было бы приспособить для PostgreSQL?


Win32nipuh wrote:проблема в том, что нужно не замену найти, а еще и данные перенести, некоторые гуиды известны еще и в приложении, избавиться не удается.


Так чего собственно надо-то ? Формулировка вопроса противоречива.

В MSSQLServer есть такая функция:
NEWID
Creates a unique value of type uniqueidentifier.
Используется она так:
CREATE TABLE cust
(
cust_id uniqueidentifier NOT NULL
DEFAULT newid()
)


Так вот я хочу перенести базу на PostgreSQL и мне нужнен аналог такой функции для генерации гуидов и вставки значений по умолчанию для добавляемых записей.
PostgreSQL под Linux/FreeBSD.

Отказаться от гуида в таблицах невозможно, его нужно хранить хоть как строку, хоть как угодно, но приложение работает с гуидами


Ну вот.


Если точно, то мне нужна замена
Michael Popov
Уже с Приветом
Posts: 991
Joined: 09 Sep 2001 09:01
Location: The Earth

Post by Michael Popov »

GUID это просто набор битов уникальный (hopefully) во Вселенной. Каким образов Вы его формируете роли не играет. Всякий набор 128 (?) битов будет valid. Есть ли в Postgress функция формирования уникального набора 128 битов - не знаю. Как сделать это из приложения я уже написал.
Best regards,

Michael Popov
User avatar
dot
Уже с Приветом
Posts: 4461
Joined: 17 Jun 2003 04:41

Post by dot »

Есть ли встроенные генераторы в Postgres/Linux я не знаю, (в Postgres есть OID - уникальный в рамках базы)но что вам мешает сделать либо #Netcard+GMTtime or ServerIP+GMTime
,,, ^. .^ ,,,
User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Гуид

Post by Win32nipuh »

dot wrote:Есть ли встроенные генераторы в Postgres/Linux я не знаю, (в Postgres есть OID - уникальный в рамках базы)но что вам мешает сделать либо #Netcard+GMTtime or ServerIP+GMTime


Оказывается, в Линуксах есть полноценный генератор гуидов, и называется он
>uuidgen

Прикаждом выполнении он генерирует то, что нужно - uuid или guid, что собственно одно и то же.

Так вот, жизнь продолжается :-)
Как я могу его использовать при вставке новых записей в PostgreSql, т.е. для заполнения поля по умолчанию гуидом?
В триггере? как вызвать в триггере исполняемый файл линукса?
User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Post by Win32nipuh »

Нашел.Можно добавить такой тип :-), спасибо за участие.
User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Post by Win32nipuh »

http://gborg.postgresql.org/project/uni ... isplay.php


Нужна помощь гуру:
все сделал как было написано, когда делаю make, получаю ошибки:

Makefile: 7: ../../src/Makefile.global: No such file or directory
Makefile: 17: /contrib/contrib-global.mk: No such file or directory
make: *** No rule to make target 'contrib/contrib-global.mk'. Stop.

Чего не хватает? что нужно доустановить в систему?
С линуксом пока разбираюсь, осваиваю...

Return to “Вопросы и новости IT”