问题标签 [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.
postgresql - 使用 max ID 函数为序列调用 setval 时是否应该锁定 PostgreSQL 表?
我有以下 SQL 脚本,它设置与 ID 列的最大值对应的序列值:
在这种情况下我是否应该锁定“mytable”以防止在并行请求中更改 ID,如下例所示?
还是 setval(max(id)) 是原子操作?
sql - 无法确定我的 SQL 表中的数据类型不正确
我正在尝试创建一个 SQL 表,但我不断收到此错误。
这是我的代码。
postgresql - 未找到 Postgresql 排序器
我正在创建一个项目记录编号生成器。目标是有一个表格来容纳各种不同类型的所有记录号/序列器。例如,对于“零件”,您可能需要像“110-00001-00”这样的数字。seqItem 表将保存此数字生成器的定义(SeqName、preFix、postFix、填充)。
当向该表添加新记录时,我想使用“SeqName”创建一个新序列。因此,我创建了以下触发器/函数:
这很完美,并且每创建一条新记录,我都会创建一个新的音序器。如果行被删除,我还创建了另一个函数/触发器来删除定序器。
到目前为止,一切都很好!所以,让我们添加一条新记录,看看是否添加了 Sequencer:
但是,当我尝试使用触发器中新创建的音序器时,我收到以下错误,即找不到音序器。
错误:关系“testitem1”不存在
如果我创建一个没有触发器的新序列器,它工作正常:
如果我将该定序器添加到我的查询中,它可以正常工作:
两个音序器对我来说都很好,但是由触发器创建的那个我无法开始工作......
任何帮助将不胜感激!
sql - Postgres 技术角色仅适用于序列
有角色sequence_owner。这是仅处理序列的特殊技术角色。
还有几个具有角色的用户administrator
:user1,...user42
使用 user1 我可以创建序列:
但我不能将所有者更改为特殊sequence_owner
角色
出现错误:错误:架构 schema1 的权限被拒绝
我不会使用:
因为在这种情况下,这个角色sequence_owner
将拥有比它必须拥有的更多的特权。
postgresql - 如何使用 select 语句声明一个函数以将所有 auto_increment 值重置为 postgresql 中表的最大 id
我有一个包含许多表的 Postgres 数据库。我想声明一个函数,将所有表的所有 auto_increment 值 (next_value) 重置为表的 max(id)。例如,如果sample_table的max(id)为22:
虽然表的next_value是7:
我想通过以下方式将所有表的next_value设置为它们的max(id):
为此,我通过以下方式声明了一个名为reset_auto_increment的函数:
但是上面语句声明的函数有以下错误:
如何纠正这个功能?
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 是否已经存在?
java - 2 使用不同休眠版本但相同oracle数据库的应用程序抛出唯一约束错误
有2个应用程序:一个是使用Spring boot - 1.5.18.Release版本,其休眠版本为5.0.12.Final
另一个应用程序正在使用 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 ;
postgresql - 如何在 PostgreSQL 中重置自动生成的主键
我的表类topics
如下。主键是自动生成的序列键。在测试时,我从表中删除了行并试图再次重新插入它们。UUID 未重置。
我尝试了以下命令来重置密钥
那没起效。
我将不胜感激任何形式的建议!
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
我的以下序列创建查询有什么问题?