问题标签 [database-sequence]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
549 浏览

postgresql - 使用 max ID 函数为序列调用 setval 时是否应该锁定 PostgreSQL 表?

我有以下 SQL 脚本,它设置与 ID 列的最大值对应的序列值:

在这种情况下我是否应该锁定“mytable”以防止在并行请求中更改 ID,如下例所示?

还是 setval(max(id)) 是原子操作?

0 投票
1 回答
59 浏览

sql - 无法确定我的 SQL 表中的数据类型不正确

我正在尝试创建一个 SQL 表,但我不断收到此错误。

这是我的代码。

0 投票
1 回答
33 浏览

postgresql - 未找到 Postgresql 排序器

我正在创建一个项目记录编号生成器。目标是有一个表格来容纳各种不同类型的所有记录号/序列器。例如,对于“零件”,您可能需要像“110-00001-00”这样的数字。seqItem 表将保存此数字生成器的定义(SeqName、preFix、postFix、填充)。

当向该表添加新记录时,我想使用“SeqName”创建一个新序列。因此,我创建了以下触发器/函数:

这很完美,并且每创建一条新记录,我都会创建一个新的音序器。如果行被删除,我还创建了另一个函数/触发器来删除定序器。

到目前为止,一切都很好!所以,让我们添加一条新记录,看看是否添加了 Sequencer:

但是,当我尝试使用触发器中新创建的音序器时,我收到以下错误,即找不到音序器。

错误:关系“testitem1”不存在

如果我创建一个没有触发器的新序列器,它工作正常:

如果我将该定序器添加到我的查询中,它可以正常工作:

两个音序器对我来说都很好,但是由触发器创建的那个我无法开始工作......

任何帮助将不胜感激!

0 投票
1 回答
41 浏览

sql - Postgres 技术角色仅适用于序列

有角色sequence_owner。这是仅处理序列的特殊技术角色。

还有几个具有角色的用户administrator:user1,...user42

使用 user1 我可以创建序列:

但我不能将所有者更改为特殊sequence_owner角色

出现错误:错误:架构 schema1 的权限被拒绝

我不会使用:

因为在这种情况下,这个角色sequence_owner将拥有比它必须拥有的更多的特权。

0 投票
0 回答
59 浏览

postgresql - 如何使用 select 语句声明一个函数以将所有 auto_increment 值重置为 postgresql 中表的最大 id

我有一个包含许多表的 Postgres 数据库。我想声明一个函数,将所有表的所有 auto_increment 值 (next_value) 重置为表的 max(id)。例如,如果sample_tablemax(id)22

虽然表的next_value7

我想通过以下方式将所有表的next_value设置为它们的max(id)

为此,我通过以下方式声明了一个名为reset_auto_increment的函数:

但是上面语句声明的函数有以下错误:

如何纠正这个功能?

0 投票
0 回答
22 浏览

sql - 即使没有 INSERT 发生,序列也会递增

我有一个具有以下结构的表:

该表每天更新。直到最近,该表才更新如下:如果UNIQUE section_id已经存在(即执行了常规的 SELECT EXISTS),则不需要添加任何内容。每天约有10,000个条目进入入口。

我决定用简单的 UPSERT 替换这个逻辑:

但随后串行字段出现了一个小问题。每次INSERT INTO查询时,id 序列号都会自动递增,即使没有插入任何记录。那些列中最后一个id是条件= 1800。昨天表中出现了几条新记录,id如下:2300、2560、8120、9982。今天id已经超过20,000。它尝试插入的那些,递增计数器,不插入,但不回滚计数器。

我认为,几个月后,即使不添加新行,它最终也会达到序列范围限制。

序列脚本:

有可能以某种方式解决这种情况吗?当您从表中删除一条记录并且某种 ID 消失时,这是一回事。但是即使没有插入任何行,这里的序列也会呈指数增长。或者我应该返回旧版本并检查这样的 section_id 是否已经存在?

0 投票
1 回答
73 浏览

postgresql - 当 pgAdmin 中的 csv 导入文件失败时,SERIAL PRIMARY KEY 不断计数

我有带有 SERIAL PRIMARY KEY 的表,当导入带有一些数据的 csv 文件并且由于任何原因它失败时,当导入成功时 PRIMARY KEY 而不是从零开始(如果表为空)它从它被认为的数字开始如果导入操作没有像下面显示的屏幕截图那样失败。

数据输出

我找到了一些解决方案,但在我的情况下不像 TRUNCATE TABLE 那样工作。我应用了它并 TRUNCATE TABLE 并且所有数据都被删除了,但是当再次导入时,序列号继续以顺序方式计数。

我想知道一种避免这种情况的方法,因为将来当我有更多数据的表时,要修复它将是一个巨大的问题,所以有什么方法可以在不删除或删除表的情况下修复它?

非常感谢

0 投票
2 回答
141 浏览

java - 2 使用不同休眠版本但相同oracle数据库的应用程序抛出唯一约束错误

有2个应用程序:一个是使用Spring boot - 1.5.18.Release版本,其休眠版本为5.0.12.Final

https ://search.maven.org/artifact/org.springframework.boot/spring-boot-dependencies/1.5.18.RELEASE/pom

另一个应用程序正在使用 Spring boot - 2.4.1 版本,其休眠版本为5.4.25.Final:https://search.maven.org/artifact/org.springframework.boot/spring-boot-dependencies/2.4.1 /pom 我们使用了@SequenceGenerator(name = "sequenceGenerator", sequenceName = "ABCD_SEQ",allocationSize = 1),

分配大小是必需的,因为应用程序没有启动

而第一次申请时不需要分配大小。

数据库序列是使用“INCREMENT BY 1”创建的,并且两个应用程序都使用相同的 oracle 数据库。

这两个应用程序使用了许多类似的实体,这些实体被复制到另一个应用程序/项目中。

但是当从 spring-boot 为 2.4.1 的第二个应用程序插入记录时,我们遇到了独特的序列生成器问题。

分析时,我们发现第一个应用程序(1.5.18.Release)突然增加序列,尽管它应该增加 1,在两者之间留下很多间隙,有时是 50、100 等,当第二个应用程序( 2.4.1) 尝试插入记录,出现唯一约束错误。

请帮忙,究竟在哪里搜索根本原因,或者这种情况下如何使用休眠缓存机制?

第一个应用程序中的一个实体(1.5.18.Release)

虽然另一个应用程序(2.4.1)是相似的,但唯一的区别是序列生成器,例如:

并且数据库序列是:

CREATE SEQUENCE "MERCURY_INSTANCE_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 55 NOCACHE NOORDER NOCYCLE ;

0 投票
1 回答
186 浏览

postgresql - 如何在 PostgreSQL 中重置自动生成的主键

我的表类topics如下。主键是自动生成的序列键。在测试时,我从表中删除了行并试图再次重新插入它们。UUID 未重置。

我尝试了以下命令来重置密钥

那没起效。
我将不胜感激任何形式的建议!

0 投票
1 回答
48 浏览

sql - 序列 ID 未正确插入

我创建了一个序列,但它没有按序列顺序插入 id。

例如:

  • 首先,我创建了一组记录序列号,生成为 1、2、3、4

  • 我再次创建了另一组从 8、9、10 开始的记录 seq

  • 第三次我创建了另一组记录 seq id 生成为 5、6、7(这是不正确的,我希望 seq id 继续为 11、12、13)

所以5、6、7是错的,我需要生成11、12、13

我的以下序列创建查询有什么问题?