假设我有一个带id BIGSERIAL列的表。我刚刚开始了一个新的会话。我想知道id我插入的下一行是什么。我怎么能说这个?
我不能简单地SELECT MAX(id) FROM my_table(如果没有找到就返回 1),因为如果我之前删除了东西,下一个id不会是 1,而是会更高。
我已经看过其他使用currval()和的答案nextval()。除非我在当前会话中插入,否则它们不起作用......而且我不想插入一行并查看我得到的 ID,哈哈。
我将要锁定表并在客户端上从 Python 脚本插入大量行,该脚本也在字典中跟踪行 ID。行 ID 必须匹配,所以我需要知道第一个是什么。我很惊讶没有其他人正在处理这种情况。
编辑:除非我在当前会话中插入,否则我对这些功能不起作用的看法是错误的,但请参阅下面的评论。
我有一个用 Django 应用程序创建的 Postgres 数据库。当我转移它时,它从未重新索引任何内容,并且在尝试执行此操作时出现错误。似乎有很多表都有这个问题。有没有办法可以使用我在另一个问题中找到的这段代码并将其用于所有序列和表格?
SELECT setval('tablename_id_seq', (SELECT MAX(id) FROM tablename)+1)
Run Code Online (Sandbox Code Playgroud) 上一个版本发布后,我们开始面临一些不寻常的等待。XE_SERVICES_RWLOCK等待开始出现在我们的顶级等待中。调查显示这种等待发生在插入我们的主 OLTP 表期间。我们在这部分中唯一改变的是我们通过插入序列来改变插入到标识列中。实际上我们还没有从列中删除身份选项。相反,我们只是在做
SET IDENTITY_INSERT ON
INSERT STATEMENT HERE
SET IDENTITY INSERT OFF
Run Code Online (Sandbox Code Playgroud)
我们没有删除身份属性的原因是它需要重建表,但我们的表很大,需要几个小时的停机时间。问题是什么是XE_SERVICES_RWLOCK 等待,它们是否会出现在大量语句的情况下SET IDENTITY_INSERT ON|OFF,或者根情况是否可以使用sequence而不是identity?
我们sp_WhoIsActive每 30 秒运行一次并将结果保存到表中以便以后调查问题。您可以从所附表格中看到结果。
我们使用的是 SQL Server 2016 SP2。
我将 SQL Server 2008 R2 升级到 SQL Server 2012,我注意到添加了一个新功能:Sequence.
我不知道有identity属性时添加序列的原因。
有人可以详细说明此功能的用途吗?