引文:
由 table_name.column_name 拥有
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 关联