【问题标题】:Create new schema and copy all object from old schema to new schema without the table data创建新模式并将所有对象从旧模式复制到新模式,而不包含表数据
【发布时间】:2018-11-27 04:46:34
【问题描述】:

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

我有现有的架构 (public)。

创建NPS后,我想将public架构的所有内容复制到NPS架构中,不包含表数据。

并且现有的public 序列必须在NPS 架构中设置为0。

非常感谢您的评论和回答。

【问题讨论】:

  • 您可以使用带有 --schema-only 选项的 pg_dump 命令。参考postgresql.org/docs/current/app-pgdump.html
  • @RamachandraReddy 是否在新模式中将序列计数器标记为 0,请用示例更新答案。答案将不胜感激
  • pg_dump -s > 备份.sql。您需要根据需要添加其他参数。
  • 因此它将序列设置为 0。如果是,那么如何将转储恢复到新模式。
  • 我对你的环境一无所知,你不能指望一个现成的解决方案。我会要求您通过链接 postgresql.org/docs/current/app-pgdump.html 并让我知道您是否有任何其他问题。

标签: postgresql postgresql-10 postgresql-11


【解决方案1】:

您使用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
--

【讨论】:

  • 如何在同一个数据库中复制模式。如果我们在同一个数据库中转储,那么它会将所有序列设置为 0
  • 您不能在同一个数据库中复制架构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 2020-01-22
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多