У последовательности должен быть тот же владелец, что и у таблицы, с которой она связана.
Есть следующий sql, ошибка в последней строке,
ERROR: sequence must have same owner as table it is linked to [Failed SQL: (0) ALTER SEQUENCE test_table_seq OWNED BY test_table.id
CREATE SEQUENCE test_table_seq;
ALTER TABLE test_table ALTER COLUMN id SET DEFAULT nextval('test_table_seq');
ALTER TABLE test_table ALTER COLUMN id SET NOT NULL;
ALTER SEQUENCE test_table_seq OWNED BY test_table.id;
Есть предложения, как избежать этой ошибки? благодаря!!!!
1 ответ
Цитата:
ВЛАДЕЕТ имя_таблицы.имя_столбца
Параметр OWNED BY приводит к тому, что последовательность будет связана с определенным столбцом таблицы, так что если этот столбец (или вся его таблица) будет отброшен, последовательность также будет автоматически удалена. Если указано, эта ассоциация заменяет любую ранее указанную ассоциацию для последовательности. Указанная таблица должна иметь того же владельца и находиться в той же схеме, что и последовательность. Указание OWNED BY NONE удаляет любую существующую связь, делая последовательность "автономной".
Итак, первый шаг: познакомьтесь с владельцем исходной таблицы. Как всегда есть несколько способов. Самый распространенный:
- С помощью
psql
:
\dt test_table;
List of relations
┌────────┬────────────┬───────┬─────────┐
│ Schema │ Name │ Type │ Owner │
├────────┼────────────┼───────┼─────────┤
│ public │ test_table │ table │ <name> │
└────────┴────────────┴───────┴─────────┘
где
<name>
ценность - ваша цель
- Используя запрос:
select
relnamespace::regnamespace as "schema",
relowner::regrole
from pg_class where relname = 'test_table';
┌────────┬──────────┐
│ schema │ relowner │
├────────┼──────────┤
│ public │ <name> │
└────────┴──────────┘
Очередной раз,
<name>
ваша цель.
Обратите внимание, что схема здесь не указана как условие. Если ваша таблица находится в другой схеме, то
public
тогда все могло быть немного сложнее.
Наконец, последовательность уже существует:
alter sequence test_table_seq owner to <name>;
где
<name>
это значение из одного из предыдущих шагов.
На данный момент ваша последовательность удовлетворяет упомянутому выше условию, и вы можете связать ее с table.column.