将表替换为另一个表的副本,同时保留PostgreSQL中的内容和属性

iezvtpos  于 2023-02-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(122)

我经常看到以下有关如何将一个表复制到另一个表的建议:
这一个应该创建一个具有相同属性(即主键和约束)的表,但它实际上在PostgreSQL中不起作用:

CREATE TABLE New_Users  LIKE Old_Users;

这个应该只是复制内容,一些帖子(比如这个)[https://stackoverflow.com/a/11433568]声称你可以在第一个命令之后复制内容。

INSERT INTO New_Users SELECT * FROM Old_Users GROUP BY ID;

在PostgreSQL中,如果表不存在,第二个命令似乎会创建表,如果表已经存在,则会失败,但它确实没有保留原始表的属性。
我想原子地删除一个表,然后创建一个同名的新表,但使用另一个现有表的内容和属性。

BEGIN; 
    DROP TABLE New_Users;
    CREATE TABLE New_Users  (LIKE Old_Users);
    INSERT INTO New_Users SELECT * FROM Old_Users;
END;

这将自动删除当前版本的表,创建一个包含所有属性的 backbone ,最后用引用表的内容填充它。我如何在PostgreSQL中实现这一点?

axr492tv

axr492tv1#

可以将like与选项一起使用

DROP TABLE New_Users;
create table New_Users (like Old_Users including all)

或者更快

TRUNCATE New_Users RESTART IDENTITY;
INSERT INTO New_Users SELECT * FROM Old_Users;

相关问题