Как связать последовательность с полем с помощью PostgreSQL?

В документации postgreSQL 9.6 сказано, что для серийного эквивалента мы должны связать последовательность с полем.

https://www.postgresql.org/docs/9.6/datatype-numeric.html (¤ 8.1.4)

Я точно применил тот же код:

CREATE SEQUENCE seq_import_trame INCREMENT 1 START 1; 

CREATE TABLE import_trame (
    id integer NOT NULL DEFAULT nextval('seq_import_trame'), 
    ...,
    CONSTRAINT pk_import_trame PRIMARY KEY (id)
);
ALTER SEQUENCE seq_import_trame OWNED BY import_trame.id;

Но у меня ошибка при выполнении скрипта с pgAdmin.

Отношение "seq_import_trame" уже существует".
Код: 42P07
Строка 8: ALTER SEQUENCE.....

Это очень странно, потому что ошибка 42P07 — это повторяющаяся_таблица. И если мы не создадим ссылку, последовательность не будет удалена при удалении таблицы.

Любая идея ?


person MychaL    schedule 07.02.2019    source источник
comment
Итак, что произойдет, если вы закомментируете верхнюю строку?   -  person Caius Jard    schedule 07.02.2019
comment
По-видимому, последовательность уже существует, поэтому вы можете удалить часть create sequence   -  person a_horse_with_no_name    schedule 07.02.2019
comment
Ваш код работает нормально. Вы получаете ошибку в первой строке скрипта, вот и все. Вот скрипка db‹›: dbfiddle.uk/.   -  person Gordon Linoff    schedule 07.02.2019
comment
Очень странно....в pgAdmin есть 2 режима выполнения: 1) выполнить 2) выполнить pgscript. С pgscript это работает, потому что, вероятно, он фиксирует каждую команду построчно. При нормальном выполнении по-прежнему возникает ошибка ALTER SEQUENCE. Я не могу удалить первую строку, как вы предлагаете. Последовательности ранее не существовало, и ее необходимо создать с определенным именем (жаль, что моему клиенту требуется это условное имя).   -  person MychaL    schedule 07.02.2019
comment
Последовательность уже существует, используйте CREATE SEQUENCE IF NOT EXISTS ....   -  person Ondřej Xicht Světlík    schedule 07.02.2019


Ответы (1)


Я не вижу проблем с DB Fiddle:

Схема (PostgreSQL v9.6)

CREATE SEQUENCE seq_import_trame INCREMENT 1 START 1; 

CREATE TABLE import_trame (
    id integer NOT NULL DEFAULT nextval('seq_import_trame'), 
    CONSTRAINT pk_import_trame PRIMARY KEY (id)
);
ALTER SEQUENCE seq_import_trame OWNED BY import_trame.id;

Просмотр скрипта БД

Проверьте еще раз ваш скрипт.

person Alex Yu    schedule 07.02.2019
comment
Кажется, проблема с pgAdmin. При выполнении SQL возвращает ошибку в строке ALTER SEQUENCE. С выполнением pgScript все в порядке. Странный. - person MychaL; 11.02.2019
comment
Не совсем, но я решу тему, потому что это не PostgreSQL pb... это pgAdmin :( - person MychaL; 12.02.2019