如何在postgresql中复制序列号

如何在postgresql中复制序列号,postgresql,Postgresql,对于基于postgres的数据库,我需要将表定义和序列号从一个模式镜像到另一个模式。为了复制模式定义,我已经能够仅将pg_dump与模式定义一起使用,但是文档似乎表明只有在选择数据导出时才导出序号 在模式导出中是否有一种易于导出相应序列号的方法,或者是否有一种易于传输这些值的方法,或者是否是从脚本语言与数据库接口的唯一替代方法?查看转储时,pg_转储首先写入序列的创建,并更正起始值 SELECT pg_catalog.setval('tuutti_id_seq', 4, true); 因此,如

对于基于postgres的数据库,我需要将表定义和序列号从一个模式镜像到另一个模式。为了复制模式定义,我已经能够仅将pg_dump与模式定义一起使用,但是文档似乎表明只有在选择数据导出时才导出序号


在模式导出中是否有一种易于导出相应序列号的方法,或者是否有一种易于传输这些值的方法,或者是否是从脚本语言与数据库接口的唯一替代方法?

查看转储时,pg_转储首先写入序列的创建,并更正起始值

SELECT pg_catalog.setval('tuutti_id_seq', 4, true);
因此,如果只转储模式,则可以从信息模式构造语句,例如使用SQL查询:

SELECT 'SELECT pg_catalog.setval(''' || sequence_name || ''', ' || start_value || ', true);'
  FROM information_schema.sequences;

您必须记住,pg_dump和pg_restore主要用于备份和恢复类型的过程。如果没有数据,从1开始所有序列通常更有意义。为什么要从镜像数据库的先前值开始序列?如果不复制数据,那么为什么需要同步序列值?我正在执行局部条件数据迁移,因此我需要序列号保持不变,以防止它们生成以前已分配的序列。