Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / composite type в качестве primary key / 5 сообщений из 5, страница 1 из 1
02.11.2007, 01:32
    #34911768
composite type в качестве primary key
Есть желание в качестве PK использовать поле составного типа
(
"uri" INTEGER,
"id" BIGINT
)
которое при отдаче на клиент выглядело бы как BIGINT, преобразовываясь по функции a la
uri << 40 || id && 1099511627775 (т.е. как BIGINT содержащий в трех старших разрядах uri, а в остальных младших id), но при этом, чтобы самом постгресе можно было, при желании, обращаться к полям типа (uri, id) по раздельности.

Подскажите, пожалуйста, возможен ли такой фокус в постгресе? Если да, то куда копать? Или есть более простые методы решения подобной задачи?
...
Рейтинг: 0 / 0
11.11.2007, 01:43
    #34930397
composite type в качестве primary key
up!

Неужели никто не сталкивался? Или вопрос, в принципе, неверно поставлен?
...
Рейтинг: 0 / 0
11.11.2007, 10:17
    #34930465
av1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
composite type в качестве primary key
Дмитрий РябовЕсть желание в качестве PK использовать поле составного типа
(
"uri" INTEGER,
"id" BIGINT
)
которое при отдаче на клиент выглядело бы как BIGINT, преобразовываясь по функции a la
uri << 40 || id && 1099511627775 (т.е. как BIGINT содержащий в трех старших разрядах uri, а в остальных младших id), но при этом, чтобы самом постгресе можно было, при желании, обращаться к полям типа (uri, id) по раздельности.

Подскажите, пожалуйста, возможен ли такой фокус в постгресе? Если да, то куда копать? Или есть более простые методы решения подобной задачи?

Проблема в чем? Не знаете как индекс назначить? Или что? Объясните точно чего Вы хотите
...
Рейтинг: 0 / 0
11.11.2007, 10:37
    #34930473
av1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
composite type в качестве primary key
Чего-то вроде этого?

create type uri_id_type as (
uri integer,
id bigint
);

create table .... ( uri_id uri_id_type, ..... );

create function uri_id_show(uri_id_type) returns bigint as $_$
select ($1.uri::bigint<<40 + $1.id)::bigint;
$_$ language 'sql';

create unique index uri_id_idx on ...(uri_id_show(uri_id));
...
Рейтинг: 0 / 0
12.11.2007, 14:28
    #34932355
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
composite type в качестве primary key
может быть проще обойтись без дополнительного типа?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
-- обращаться можно только по uri, id
create table t1 (
 uri integer,
 id bigint,
 value text,
 primary key (uri,id)
);

-- обращаться можно только по uri_id
create view v1 as select
 uri <<  40  || id &&  1099511627775  as uri_id,
 value
from t1;

-- обращаться можно по uri, id или по uri_id
create view v1 as select
 uri <<  40  || id &&  1099511627775  as uri_id,
 *
from t1;
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / composite type в качестве primary key / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]