use*_*591 1 postgresql sequence-sql
有以下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;
Run Code Online (Sandbox Code Playgroud)
任何建议如何避免该错误?谢谢!!!!
引文:
由 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> ?
?????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
其中,<name>价值是你的目标
select
relnamespace::regnamespace as "schema",
relowner::regrole
from pg_class where relname = 'test_table';
?????????????????????
? schema ? relowner ?
?????????????????????
? public ? <name> ?
?????????????????????
Run Code Online (Sandbox Code Playgroud)
再次,<name>是你的目标。
请注意,此处未将架构指定为条件。如果您的表在架构中不同,public那么它可能会更复杂一点。
最后,序列已经存在:
alter sequence test_table_seq owner to <name>;
Run Code Online (Sandbox Code Playgroud)
其中<name>是来自上一步之一的值。
现在你的序列满足上面提到的条件,你可以将它与 table.column 相关联
| 归档时间: |
|
| 查看次数: |
1814 次 |
| 最近记录: |