创建新架构,并将所有对象从旧架构复制到没有表数据的新架构

时间:2018-11-27 04:46:34

标签: postgresql postgresql-10 postgresql-11

我想创建一个新架构(NPS)。

我有现有的架构(public)。

创建NPS后,我想将public架构的所有内容复制到NPS架构而没有表数据。

,并且必须在public模式中将现有NPS序列设置为0。

评论和答案深表感谢。

1 个答案:

答案 0 :(得分:0)

您使用pg_dump -F c -s -n public <yourdatabase>仅获取对象定义。

将转储恢复到其他数据库,将模式public重命名为nps(不要使用大写!),设置适当的模式权限,然后再次转储。

将转储恢复到原始数据库。

要回答您的问题是否会重置序列,一个简单的实验将向您显示它确实如此:

CREATE SEQUENCE testseq;

SELECT nextval('testseq');
 nextval 
---------
       1
(1 row)

SELECT nextval('testseq');
 nextval 
---------
       2
(1 row)

然后转储并说服:

pg_dump -n laurenz -t testseq -s test

...
CREATE SEQUENCE laurenz.testseq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE laurenz.testseq OWNER TO laurenz;

--
-- PostgreSQL database dump complete
--