恢复后的PostgreSQL序列冲突

恢复后的PostgreSQL序列冲突,postgresql,sequence,Postgresql,Sequence,我需要导出我的数据库,其形式如下: users( id serial primary key, name text, surname text ) object( objectID integer primary key, .... ) edits( userID integer references (user.id), objectID integer references (object.objectID), ... ) 但是,当我使用pg_dump导出我的数据库时,它如下所示:

我需要导出我的数据库,其形式如下:

users(
id serial primary key,
name text,
surname text
)

object(
objectID integer primary key,
....
)


edits(
userID integer references (user.id),
objectID integer references (object.objectID),
...
)
但是,当我使用pg_dump导出我的数据库时,它如下所示:

insert into users(1,'Paul','Swanson');
insert into users(4,'Bob','Vincent');
PostgresSQL不使用序列列后面的序列,也不在每次插入后更新序列

所以问题是。。。修复串行数据类型(实际上是整数数据类型)的列是否可能在以后导致问题? 我的意思是如果我这样做:

insert into users('Mindy', 'Blue');

postgresSQL是否有可能提出已经使用的ID?也许它会提出第一个ID 1。我怀疑这应该是可能的,因为在数据库的备份中,用户ID是固定的,因此我怀疑序列列ID后面的序列没有更新

As@a_horse_with_no_name表示文件末尾有setval(…),它用插入表中的max ID更新序列。

pg_dump
生成的脚本应包含一个
setval()
调用相关序列,使序列与手动提供的值同步,这可能会在以后导致问题。因为正如您所说,序列不会以这种方式更新,并且每当postgres点击现有序列时,事务将失败。这导致行为不一致。因此,要么您必须使用setval并处理转储本身(如果您有很多约束,这可能会非常烦人),要么您可以将序列更新为当前的最大值。这不是一个干净的解决方案,意味着您的序列可能会错过范围。@一个带有“否”名称的“是”的“马”,您说得对,在文件的末尾有使用最后一个ID的setval(…)。非常感谢你!