标签: database-sequence

如何在一张表中创建多个序列?

我有一张“收据”表。我有列customer_id(谁有收据)和receipt_number。对于每个客户,receipt_number 应该从 1 开始,并且是一个序列。这意味着customer_id 和receipt_number 将是唯一的。我怎样才能优雅地做到这一点。我可以将内置序列功能与 CREATE SEQUENCE 或类似功能一起使用吗?似乎我必须为每个客户创建一个序列,这当然不是一个优雅的解决方案。

编辑:必须有一种线程安全和白痴安全的方式来做到这一点。这应该是一个非常简单/常见的需求。

postgresql database-design postgresql-9.1 database-sequence

5
推荐指数
1
解决办法
3345
查看次数

在 SimpleJdbcInsert 对象中指定 Oracle Sequence 以从 Oracle Sequence 生成密钥

我使用 SimpleJdbcInsert 作为,

SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(dataSource).withTableName(TABLE_NAME).withSchemaName(SCHEMA_NAME);

Map<String, Object> namedParameterMap = new HashMap<String, Object>();
namedParameterMap.put("ID", "MYSEQ.NEXTVAL");
namedParameterMap.put("COLUMN1NAME",obj1.getColumn1Value());
namedParameterMap.put("COLUMN2NAME", obj1.getColumn2Value());

simpleJdbcInsert.withoutTableColumnMetaDataAccess().execute(namedParameters);
Run Code Online (Sandbox Code Playgroud)

但它仅对 ID 列引发错误,其他列工作正常,我通过注释掉 ID 列来确认这一点。

java.lang.NumberFormatException: null
Run Code Online (Sandbox Code Playgroud)

我检查了我的 Oracle 序列,它工作正常。我检查了很多博客,但找不到使用 Oracle 序列和 SimpleJdbcInsert 的合适博客。

oracle spring-jdbc jdbctemplate simplejdbcinsert database-sequence

5
推荐指数
1
解决办法
2010
查看次数

Db2:如何更新序列的当前值

我们在Db2数据库中使用序列.最近,我们已将数据从AIX服务器迁移到Linux服务器.在此期间,该序列的最新数量未移至Linux系统.因此,我们现在看到重复值.

以下是我们如何使用序列:

SELECT NEXTVAL FOR SEQ_YFS_ORDER_NO FROM SYSIBM.SYSDUMMY1
Run Code Online (Sandbox Code Playgroud)

Linux上序列的当前值是100092142.如何将它更新为AIX系统上的当前值,即(100110960)?

sql db2 sequences database-sequence

5
推荐指数
1
解决办法
7232
查看次数

Postgres 从其他表中插入的值

我有两个表:

CREATE TABLE tbl_a (
id serial primary key NOT NULL,
name text NOT NULL,
tbl_b_reference NOT NULL
)

CREATE TABLE tbl_b (
id serial primary key NOT NULL,
status text)
Run Code Online (Sandbox Code Playgroud)

我想做两个插入。一个在 tbl_b 中,然后在我插入 tbl_a 时使用该插入中的 ID。

我试过这个:

INSERT INTO tbl_a(name, tbl_b_reference) 
VALUES ("myName", (INSERT INTO tbl_b (status) VALUES ('OK') RETURNING id));
Run Code Online (Sandbox Code Playgroud)

但我只收到指向第二个“INTO”的语法错误

ERROR: syntax error at or near "INTO" Position: 68
Run Code Online (Sandbox Code Playgroud)

我从哪里开始,是否可以在不编写永久函数或创建触发器的情况下做到这一点?我是 postgres 的新手,只知道 MySQL/MariaDB 的一些基础知识。我一直在这里搜索与嵌套插入相关的其他问题,但找不到我设法实际使用的东西,因此非常感谢代码示例。

postgresql sql-insert database-sequence

3
推荐指数
1
解决办法
2566
查看次数

错误:在 Postgres 中发现了不止一个拥有的序列

我正在为Patient表的现有列设置标识列。
在这里,我想使用GENERATED ALWAYS AS IDENTITY

因此,我使用以下语句设置了标识列(以前是serial):

ALTER TABLE Patient ALTER PatientId
   ADD GENERATED ALWAYS AS IDENTITY (START WITH 1);
Run Code Online (Sandbox Code Playgroud)

对于现有的患者表,我总共有 5 条记录。( patientId1 到 5)
当我在身份设置后插入新记录时,它会抛出如下错误:

more than one owned sequence found
Run Code Online (Sandbox Code Playgroud)

即使在重置标识列后,我仍然遇到相同的错误。

ALTER TABLE Patient ALTER COLUMN PatientId RESTART WITH 6;
Run Code Online (Sandbox Code Playgroud)

如果您有任何解决方案,请告诉我。

postgresql identity-column database-sequence

3
推荐指数
1
解决办法
3611
查看次数

postgres 如何重置或更新表的索引(序列)

我删除了表中的 2000 行,然后插入了相同的 2000 条记录,但它们的索引(id 自动增量字段)从 2001 年开始,现在我想将这些索引 2001 - 4000 更新为 1-2000

sql postgresql database-sequence

2
推荐指数
1
解决办法
1791
查看次数

如何实现多维序列

例如,这是一个年度序列。的no增量为year

| no | year |
+----+------+
|  1 | 2016 |
|  2 | 2016 |
|  3 | 2016 |
|  1 | 2017 |
|  2 | 2017 |
|  4 | 2016 |
Run Code Online (Sandbox Code Playgroud)

目前,我已经为每年创建了序列,
但是问题是Oracle不会在明年自动创建新序列。

另一个问题是,如果我想使用3D序列,year并在和内递增type

| no | year | type |
+----+------+------+
|  1 | 2016 |    a |
|  2 | 2016 |    a |
|  1 | 2016 |    b |
|  1 | …
Run Code Online (Sandbox Code Playgroud)

oracle oracle12c database-sequence

2
推荐指数
1
解决办法
97
查看次数

在PostgreSQL中,在授予序列时,我是否只能授予USAGE而不是SELECT,USAGE?

我阅读了关于在PostgreSQL中授予序列的答案.一般来说,他们说同时授予SELECT,USAGE.我想知道我是否只能授予使用权.哪一个是授予序列的最佳实践,为什么?

postgresql database-sequence

2
推荐指数
1
解决办法
173
查看次数

如何批量更新所有表的序列 ID postgreSQL

我使用 TablePlus(SQL 客户端)将 Postgres SQL 文件导入到我的服务器,但在插入新行后,出现如下错误:

SQLSTATE[23505]:唯一违规:7 错误:重复键值违反唯一约束 \"users_pkey\" 详细信息:键 (id)=(1) 已经存在

我知道它是由序列值为 0 引起的,需要通过以下代码更新:

SELECT setval(_sequence_name_, max(id)) FROM _table_name_;
Run Code Online (Sandbox Code Playgroud)

但是如果我必须一一写入所有表序列(可能是数百个序列),则需要很多时间。那么如何一次更新所有序列呢?

sql postgresql database-sequence

2
推荐指数
1
解决办法
615
查看次数

如何找到主键序列和主键最大值

我知道这个问题有点愚蠢,我需要运行这些查询来查看值是否不同步,但我收到类似“关系不存在”的错误:

 SELECT MAX(the_primary_key) FROM the_table;   
 SELECT nextval('the_primary_key_sequence');
Run Code Online (Sandbox Code Playgroud)

我有一个名为“Audit”的表,其主键列为“auditID”。当我运行第一个查询时,我得到了结果:

SELECT MAX('auditID') FROM "Audit";
   max
---------
 auditID
 (1 row)
Run Code Online (Sandbox Code Playgroud)

但最大应该超过 10000。

然后我运行第二个查询,并收到错误“关系“the_primary_key_sequence”或“Audit_auditID_seq”不存在”。如何检查主键序列是否存在?

错误:

select setval('Audit_auditID_seq', 171832, true);
ERROR:  relation "audit_auditid_seq" does not exist
LINE 1: select setval('Audit_auditID_seq', 171832, true);
Run Code Online (Sandbox Code Playgroud)

sql postgresql database-sequence

1
推荐指数
1
解决办法
3212
查看次数

postgresql 中 Oracle 序列的 NO ORDER 的等效项是什么?

我有一个疑问

CREATE SEQUENCE  "SEQ_ID"  
    MINVALUE 1 
    MAXVALUE 99999 
    INCREMENT BY 1 START WITH 121 
    CACHE 20 
    NOORDER  
    NOCYCLE; 
Run Code Online (Sandbox Code Playgroud)

这是一个oracle命令。

现在,我想转换成 PostgreSQL 命令。

我如何在这里替换“NO ORDER”。

postgresql database-sequence

1
推荐指数
1
解决办法
1545
查看次数