ChatGPT解决这个技术问题 Extra ChatGPT

如何使用复制命令在 postgres 中将数据从一个表复制到另一个表

我们使用复制命令将一个表的数据复制到数据库外部的文件中。

是否可以使用命令将一个表的数据复制到另一个表。

如果是,任何人都可以分享查询。

或者有没有更好的方法,比如我们可以使用 pg_dump 或类似的东西。

不需要复制命令:insert into other (col1, col2) select col1, col2 from one
使用复制/转储的时间是在未连接的数据库之间移动数据(使用文件作为过渡)。如果表在同一个数据库中,则不需要这样做。
感谢您的回复,但我只是好奇是否可以使用复制命令将数据从一个表复制到另一个表。如果是的话怎么做?
...以及如何为特定字段添加默认值?是否可以在 INSERT 语句中?

F
Flimm

你不能轻易做到这一点,但也没有必要这样做。

CREATE TABLE mycopy AS
SELECT * FROM mytable;

或者

CREATE TABLE mycopy (LIKE mytable INCLUDING ALL);

INSERT INTO mycopy
SELECT * FROM mytable;

如果您只需要选择一些列或重新排序它们,您可以这样做:

INSERT INTO mycopy(colA, colB)
SELECT col1, col2 FROM mytable;

您还可以进行选择性 pg_dump 并仅恢复目标表。


我刚刚为不同架构中的应用程序创建了重复表,但是当我尝试使用 INSERT INTO mycopy SELECT * FROM mytable 方法时,我得到 ERROR: column "order" is of type integer but expression is of type text LINE 2: SELECT * FROM django_apps.about_post 需要明确的是,order 在两个表中都是一个整数。
@RyanM 新问题请在两个表中显示来自 psql\d 输出
@RyanM 同样。您可以通过使用列名(例如 INSERT INTO mycopy (a, b) SELECT * FROM mytable)来避免这种情况,但我来这里是为了尝试找到替代方法。我的表具有所有相同的列,只是顺序不同。事实证明这是不可能的。 stackoverflow.com/questions/1267427/…
第二个选项(包括所有)非常适合我使用 postgres 11.2 和 alpine linux 3.9
请注意,使用 (INCLUDING ALL) 创建的表将与另一个表共享序列
S
Steve Irwin

如果两个表中的列相同(名称和数据类型),那么您可以使用以下

INSERT INTO receivingtable (SELECT * FROM sourcetable WHERE column1='parameter' AND column2='anotherparameter');

M
Manish Jain

假设已经有一个表,并且您想将该表中的所有记录复制到数据库中当前不存在的另一个表中,那么以下查询将为您执行此任务:

SELECT * into public."NewTable" FROM public."ExistingTable";

请注意,不推荐使用 select ... into 语法,取而代之的是符合标准的 create table ... as select ...