如何解决从csv导入数据后的Postgresql更新顺序
我有一个包含 10 个表的数据库,我在 pgAdmin4(symfony 后端)上使用 Postgresql db,我从 10 个不同的 csv 文件中导入了数据,在每个数据文件中我添加了一个 ID 列来设置它们的值有外键的单一事实,让我们说 TABLE1 是 TABLE_2 中的外键,TABLE_2_ID 是 TABLE_3 中的外键,TABLE_3_ID 是 TABLE_C 中的外键等等......它一直持续到最后一个表。
csv 文件的数据导入有效。我可以在我的前端显示我的数据。 现在我正在尝试通过平台用户界面将新数据插入任何表中,但出现约束错误:
sqlSTATE[23505]:唯一违规:7 错误:重复键值违反唯一约束“theme_pkey”详细信息:键 (id)=(4) 已经存在。”
假设我正在尝试在 Table_2 中创建一个新值,Doctrine orm 将启动一个错误,表明 id_key 已经存在,似乎我的数据库没有按照我拥有的当前数据进行自我更新已经在数据库中,就像 ID 没有增加一样。
我环顾四周,当您从外部源导入数据库时,这似乎很常见,但无法找到可以让我摆脱此错误消息并继续我的开发的东西。我查看了他们谈论更新顺序的所有内容,但似乎没有任何内容适合我的问题。
解决方法
在使用 PGAdmin4 将我的数据从 csv 文件导入到我的 postrgresql 数据库后,数据成功导入,查询以查看数据是否有效并且每一行都有一个 id,在我看来一切都很好,直到我尝试插入我的数据库是一个新对象,但似乎我的数据库卡在 Primary_Key id
1 中,它没有考虑导入的数据库以及它在表上显示一个带有 {{ 1}} of 1。我没有完全理解发生了什么,因为我不是 sql 方面的专家、适用于它的约定和限制,我知道的足以解决使用 ORM 的问题。>
经过数小时的研究和阅读文档后,我得出的结论是存在一个名为 Id
的东西,并且每个表都有自己的序列,例如 Sequence
和 tableA
有一个 { {1}} 和一个 tableB
。
我所要做的就是从我的表中获取最大 id/获取下一个 Id 并简单地增加下一个 Id。
---从我的目标表中获取最大值 ID
tableA_id_seq
--- 从目标表中获取下一个 ID 值
选择下一个 ID
tableB_id_seq
假设我的表中的最大 id 值是 90,所以理论上我的下一个值应该是 91,但是当我启动第二个脚本时,下一个值是 1,
所以我必须根据我的最大值 + 1 设置下一个值
---- 设置下一个跟随我的最大值的值
SELECT MAX(id) FROM table;
希望这能帮助下一个遇到类似问题的人。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。