使用SQL完全复制Postgres表
免责声明:此问题与此处的堆栈溢出问题相似,但是这些答案都无法解决我的问题,我将在后面解释。 我正在尝试在postgres中复制一个大表(〜4000万行,100多个列),在其中索引了许多列。目前,我使用以下SQL: CREATE TABLE <tablename>_copy (LIKE <tablename> INCLUDING ALL); INSERT INTO <tablename>_copy SELECT * FROM <tablename>; 此方法有两个问题: 它在数据摄取之前添加索引,因此比创建没有索引的表要花费更多的时间,然后在复制所有数据后再建立索引。 这不会正确复制“ SERIAL”样式列。它没有在新表上设置新的“计数器”,而是将新表中列的默认值设置为过去表的计数器,这意味着它不会随着行的添加而增加。 表的大小使索引成为实时问题。这也使得转储到文件然后重新注册变得不可行。我也没有命令行的优势。我需要在SQL中执行此操作。 我想做的就是要么用一些奇迹命令直接复制一个精确的副本,要么(如果不可能)复制带有所有约束但没有索引的表,并确保它们是“精神上的”约束(又名SERIAL列的新计数器)。然后使用a复制所有数据,SELECT *然后复制所有索引。 资料来源 有关数据库复制的堆栈溢出问题:这不是我要问的三个原因 它使用命令行选项pg_dump -t x2 | sed 's/x2/x3/g' | psql,在此设置下,我无权访问命令行 它在数据摄取之前创建索引,这很慢 它不能正确更新序列列作为证据 default nextval('x1_id_seq'::regclass) 重置postgres表的序列值的方法:很好,但是很不幸,它非常手工。