【发布时间】:2015-12-03 19:27:43
【问题描述】:
我正在尝试按如下方式创建表:
CREATE TABLE SCHEDULE (
SESSIONID SERIAL,
MODULECODE VARCHAR(10),
CONSTRAINT SCHEDULE_FOREIGN_KEY FOREIGN KEY (MODULECODE) REFERENCES MODULES (MODULECODE),
CONSTRAINT SCHEDULE_PRIMARY_KEY PRIMARY KEY (SESSIONID, MODULECODE));
这个想法是SESSION ID 会随着每个新行自动递增,但仅限于MODULECODE,例如:
----------------------
|SESSIONID|MODULECODE|
|---------|----------|
| 1 | A |
| 2 | A |
| 3 | A |
| 1 | B |
| 2 | B |
| 1 | C |
| 2 | C |
|--------------------|
我相信这就是AUTO_INCREMENT 在 MySQL 中的功能,但我怀疑 PostgreSQL 不能以这种方式工作。我还能如何在 PostgreSQL 中实现这一点?
【问题讨论】:
-
MySQL 的自动增量不能这样工作,Postgres 的
serial类型也不能。如果您在显示数据时生成这些数字会容易得多,例如使用row_number()并保持sessionid作为整体唯一值。 -
我应该补充一点,会话 ID 并不是一个唯一值。它仅对模块是唯一的,因此一个模块可以有任意数量的可以区分的会话。有什么方法可以实现吗?
-
你也许可以用 BEFORE INSERT 触发器做点什么...?
-
IMSoP,我承认我对 SQL 还是很陌生。我了解触发器的工作原理,但我不确定从哪里开始构建触发器以实现上述功能?任何想法都会很棒:)
-
@IMSoP 问题是更新/删除触发器后也需要,事情可能会变得混乱。
标签: sql database postgresql postgresql-9.1