从 csv 导入数据后的 Postgresql 更新序列

Postgresql update sequence after importing data from csv

我有一个包含 10 个 table 的数据库,我在 pgAdmin4(symfony 后端)上使用 Postgresql 数据库,我从 10 个不同的 csv 文件导入数据,在每个数据文件中我添加了一个ID 列为存在外键的单一事实设置它们的值,假设 TABLE1 是 TABLE_2 中的外键,TABLE_2_ID 是 TABLE_3 中的外键,TABLE_3_ID 是 TABLE_C 等中的外键...这样一直持续到最后一个 table.

csv 文件的数据导入有效。我可以在前端显示我的数据。 现在,我正尝试通过平台用户界面将新数据插入任何 table 中,但出现约束错误:

SQLSTATE[23505]: Unique violation: 7 ERROR: duplicate key value violates unique constraint "theme_pkey" DETAIL: Key (id)=(4) already exists."

假设我正在尝试在 Table_2 中创建一个新值,Doctrine orm 将启动一个错误,表明 id_key 已经存在,好像我的数据库没有' t 按照我在数据库中已有的当前数据更新自身,就像 ID 没有递增一样。

我环顾四周,当您从外部来源导入数据库时​​,这似乎很常见,但无法设法找到可以让我摆脱此错误消息并继续我的开发的东西。我查看了所有关于更新顺序的内容,但似乎没有任何内容符合我的问题。

使用 PGAdmin4 将我的数据从 csv 文件导入到我的 postrgresql 数据库后,数据已成功导入,查询以查看数据是否有效并且每一行都有一个 ID,在我看来一切都很好直到我尝试向我的数据库中插入一个新对象,但似乎我的数据库卡在 Primary_Key id 1 中,它没有考虑导入的数据库以及它显示在 table 一个 Id 为 1 的对象。我不完全理解发生了什么,因为我不是 sql 的专家,适用于它的约定和限制,我知道如何使用 ORM 解决问题。

经过数小时的研究和阅读文档后我得出结论,存在一个名为 Sequence 的东西,并且每个 table 都有自己的序列,例如 tableAtableB 有一个 tableA_id_seq 和一个 tableB_id_seq。 我所要做的就是从我的 table 中获取最大 ID / 获取下一个 ID 并简单地增加下一个 ID。

---从我的目标中获取最大值 ID TABLE

SELECT MAX(id) FROM table;

--- 从目标中获取下一个 ID 值 TABLE

SELECT 下一个 ID

SELECT NEXTVAL('table_id_seq');

假设我的 table 的最大 ID 值为 90,所以理论上我的下一个值应该是 91,但是当我启动第二个脚本时,下一个值是 1,

所以我不得不根据我的最大值 + 1 设置下一个值

---- 设置下一个跟随我的最大值的值

SELECT setval('table_id_seq', (SELECT MAX(id) FROM table)+1)

希望这能帮助下一个遇到类似问题的人。