python - 为什么 PostgreSQL 在合并实例时不增加 id_sequence 上的 last_value?

标签 python postgresql sqlalchemy

在上一个问题中,我想知道为什么在第一次将具有 ID 的实例合并到数据库(注入(inject)夹具数据)时,我从 SA 收到完整性错误。

但是,我学会了通过调用我正在注入(inject)的最高索引来解决这个问题:

select setval('my_items_id_seq', {id});

但是,这并没有解决根本问题,这正是我现在正在努力解决的问题。为什么 merge 在插入新行时不对序列调用 nextval()?

最佳答案

如果您的对象已经设置了 PK 属性,那么 ID 序列将不会被使用,因此不会递增,因为数据库没有理由执行隐式 insert into mytable (id, ...)值((从 mytable_id_seq 中选择 nextval),...)

您确定您需要对您的 session 进行合并而不是添加吗?如果您真的要插入,我认为这更像是一个 add 操作。如果您只是简单地重用一个仍在内存中的对象,但较早添加并且现在可能已在数据库中更改,则 merge 是合适的。

关于python - 为什么 PostgreSQL 在合并实例时不增加 id_sequence 上的 last_value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044980/

相关文章:

mysql - 在数据库级别跟踪计数器的最佳方法

python - 将字典中的值转换为键

python - Ubuntu 14.04 EC2 上出现 Flask-mail SMTPServerDisconnected 错误

postgresql - super 用户已过期并且是唯一的用户

postgresql - Openbravo - 在 Ubuntu 中连接 pgadmin 和 postgresql 数据库

python - 将 Mixer 与 Flask-SQLAlchemy 结合使用

python - 使用 Bottle for Python 解码 HTML 实体

python - 使用 Django Rest Framework 在 ModelViewSet 中使用自定义函数

postgresql - postgres查询更新小数增量+1

python - SQLalchemy 0.7 的任何示例,更新使用 from_statement()