免责声明: 这个问题类似于堆栈溢出问题 给你,但是这些答案都不适用于我的问题,我将在后面解释。
我试图在 postgres 中复制一个大型表(大约40M 行,100多列) ,其中许多列都被索引。目前,我使用这一点 SQL:
CREATE TABLE <tablename>_copy (LIKE <tablename> INCLUDING ALL);
INSERT INTO <tablename>_copy SELECT * FROM <tablename>;
这种方法有两个问题:
表的大小使索引成为一个实时问题。这也使得转储到文件然后重新摄取变得不可行。我也没有使用命令行的优势。我需要在 SQL 中执行此操作。
我想要做的是直接使用一些奇迹命令复制一个精确的副本,或者如果不可能的话,复制带有所有约束但没有索引的表,并确保它们是“精神上的”约束(也就是串列的一个新计数器)。然后使用 SELECT *
复制所有数据,然后复制所有索引。
消息来源
关于数据库复制的 Stack Overflow 问题 : 这不是我要问的问题,原因有三
pg_dump -t x2 | sed 's/x2/x3/g' | psql
,在此设置中,我无法访问命令行default nextval('x1_id_seq'::regclass)
正确地更新序列列作为证据方法来重置 postgres 表的序列值 : 这很棒,但不幸的是,它非常手动。