使用串行 id 字段将记录从 mysql 复制到 pgsql



我有一个基于 Web 的数据库应用程序,目前使用 mysql 数据库。我们正在从 mysql 迁移到 pgsql,因此我们将数据从 mysql db 移动到新的 pgsql db。在数据中,一个表中有标题记录,另一个表中有详细记录。标头记录具有记录 ID 的串行字段,详细信息记录具有一个数字字段,该字段保存标头记录 ID,用于将详细信息记录绑定到标头记录。由于使用此数据的应用程序在创建记录时依赖于数据库来生成记录 ID,因此目标 pgsql 数据库中存在相同的结构。如何将数据从 mysql 数据库复制到 pgsql 数据库并保持标头/详细信息 id 关系?似乎标头记录将获得其 id 的下一个序列化值,并且将添加详细信息记录,但仍保留旧的 mysql 标头记录 ID。

Postgres使用序列来跟踪自动递增的主键。您可以从 MySQL 按原样插入主键和外键。然后,您需要更新序列以基于您的数据获得 max(id(。

请参阅:https://www.postgresql.org/docs/current/functions-sequence.html

例如:

SELECT setval('your_table_name_seq', select max(id) from your_table_name);

请注意 setval 参数的"_seq"后缀。

class Employee(NamedTuple):  # inherit from typing.NamedTuple
name: str
id: int = 3  # default value
employee = Employee('Guido')
assert employee.id == 3

最新更新