Почему ограничение не отображается в публичной схеме? - PullRequest
0 голосов
/ 01 мая 2018

Я создаю таблицу с уникальным индексом в схеме следующим образом:

create schema s1;
create table s1.test(key int);
create unique index test_index on s1.test(key);

Теперь, когда я запрашиваю information_schema.table_constraints, индекс не отображается. Это почему? Тем не менее, индекс работает правильно:

test=# insert into s1.test(key) values (1);
INSERT 0 1
test=# insert into s1.test(key) values (1);
ERROR:  duplicate key value violates unique constraint "test_index"
DETAIL:  Key (key)=(1) already exists.

База данных test, которую я здесь использую, принадлежит текущему пользователю.

обновление

Похоже, что ограничение также не показано в схеме public:

create table test(key int);
create unique index test_index on test(key);
select * from information_schema.table_constraints;

1 Ответ

0 голосов
/ 01 мая 2018

Теперь, когда я запрашиваю information_schema.table_constraints, индекс не отображается

UNIQUE INDEX! = CONSTRAINT Вам необходимо добавить CONSTRAINT:

ALTER TABLE test ADD CONSTRAINT uq_test_key UNIQUE(key);

-- constraint info
SELECT *
FROM information_schema.table_constraints;


-- supportive index info
select
 t.relname as table_name,
 i.relname as index_name,
 a.attname as column_name
from
 pg_class t,
 pg_class i,
 pg_index ix,
 pg_attribute a
where
 t.oid = ix.indrelid
 and i.oid = ix.indexrelid
 and a.attrelid = t.oid
 and a.attnum = ANY(ix.indkey)
 and t.relkind = 'r'
 and t.relname = 'test';

Демонстрация DBFiddle CONSTRAINT - ограничение + индекс

Демонстрация DBFiddle ТОЛЬКО ИНДЕКС - индекс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...