过去,我将表格从复制old_schema
到new_schema
使用
create table if not exists {new_schema}.{lime_table} (like {old_schema}.{lime_table} including all);
复制/创建表结构和
insert into {new_schema}.{lime_table} (select * from {old_schema}.{lime_table});
用数据填充新表。现在,当我使用 pg_dump 将new_schema
(其结构和数据)到 .sql 文件时
pg_dump.exe --host=<HOST> --port=<PORT> --username=<USER> -n old_schema --format=p --verbose <DATABASE> > C:\new_schema_dump.sql
我发现new_schema
的表序列是指old_schema
序列。例如,
CREATE TABLE new_schema.lime_settings_user (
id integer DEFAULT nextval('old_schema.lime_settings_user_id_seq'::regclass) NOT NULL,
...
);
在 DBeaver 中检查new_schema
时,我发现它没有序列,确认new_schema
依赖于old_schema
序列。这有点令人惊讶,因为来自https://www.postgresql.org/docs/9.1/sql-createtable.html
创建完成后新表和原表完全解耦
我的问题是:如何安全地以表格序列开头的new_schema
自己的序列中给出表格?我不想从 1 开始,因为这些表已经在使用中。nextval
old_schema
new_schema
到目前为止,我已经考虑过执行以下操作。
new_schema
在with中创建一个新序列create sequence new_schema.lime_settings_user_id_seq owned by new_schema.lime_settings_user.id
设置序列
start with
参数 withselect setval('new_schema.lime_settings_user_id_seq'::regclass, (SELECT last_value + 1 FROM old_schema.lime_settings_user_id_seq))
因为这不能start with
在语句的子句中动态完成create sequence
。用 .为
new_schema
' 表提供新的序列alter table 'new_schema.lime_settings_user alter column id set default nextval('new_schema.lime_settings_user_id_seq'::regclass)
。
有一个更好的方法吗?