postgresql обновляет первичный ключ с автоматическим приращением - PullRequest
0 голосов
/ 09 июля 2019

Допустим, у нас есть следующая таблица:

drop table if exists modeling.pl_example_table;
create table modeling.pl_example_table (
    animal_name text,
    animal_id int
);

insert into modeling.pl_example_table (animal_name, animal_id) values 
('lion', 1),
('dog', null),
('cat', 2),
('catt', null);

Я хочу создать вспомогательную таблицу, в которой будут перечислены все возможные значения animal_name.animal_name должен иметь соответствующий animal_id.Эта информация будет храниться в следующей таблице, которую я инициализирую с помощью animal_name s, которые имеют не-NULL animal_id:

drop table if exists modeling.pl_example_dictionary cascade;
create table modeling.pl_example_dictionary as (
    select animal_id as id, animal_name
    from modeling.pl_example_table
    where animal_id is not null);

pl_example_dictionary не должно иметь значение NULL animal_id и animal_name должен быть уникальным (например, лошадь не может иметь animal_id как 1, так и 151).Для этого я использую следующие ограничения:

alter table modeling.pl_example_dictionary add primary key(animal_name);
alter table modeling.pl_example_dictionary add primary key(id); -- more than one PK is not allowed
create sequence modeling.pl_example_dictionary_seq owned by modeling.pl_example_dictionary.id;
alter table modeling.pl_example_dictionary alter column id set default nextval('modeling.pl_example_dictionary_seq');

Я не знаю, как справиться с тем фактом, что в таблице не может быть двух первичных ключей.Также есть проблема с последовательностью, которая начинается не с 3, а с 1 (желательно, чтобы последовательность была параметризована как select max(animal_id) from modeling.pl_example_dictionary;.

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