如何在 postgresql 中创建字母数字序列
How to create alpha numeric sequences in postgresql
我需要创建字母数字序列
示例:我有 2 个表说城市和学生。
我希望城市的顺序像 "city1,city2,city3....",学生的顺序像 "stud1,stud2,stud3" 等
谢谢。
您可以为此使用 BEFORE INSERT
触发器。此触发器可以从序列中获取数字并向其添加单词。
其他选择是在 table 之上使用简单的 VIEW
。
UPD:使用像 DEFAULT ('city' || nextval('city_city_id_seq'))
这样的自定义默认值(来自 pozs 的回答)比使用触发器更好。
A sequence
不能是字母数字。事实上,您甚至不能在 PostgreSQL 中限制为更小的数字类型:它始终是 bigint
.
但是sequence
只是创建列的一部分,也就是所谓的自增
PostgreSQL 的伪类型serial
是这样工作的:
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
要实现你想要的,你只需要定义自定义DEFAULT
表达式,如:
CREATE SEQUENCE city_city_id_seq;
CREATE TABLE city (
city_id text NOT NULL DEFAULT ('city' || nextval('city_city_id_seq'))
);
ALTER SEQUENCE city_city_id_seq OWNED BY city.city_id;
我需要创建字母数字序列 示例:我有 2 个表说城市和学生。 我希望城市的顺序像 "city1,city2,city3....",学生的顺序像 "stud1,stud2,stud3" 等
谢谢。
您可以为此使用 BEFORE INSERT
触发器。此触发器可以从序列中获取数字并向其添加单词。
其他选择是在 table 之上使用简单的 VIEW
。
UPD:使用像 DEFAULT ('city' || nextval('city_city_id_seq'))
这样的自定义默认值(来自 pozs 的回答)比使用触发器更好。
A sequence
不能是字母数字。事实上,您甚至不能在 PostgreSQL 中限制为更小的数字类型:它始终是 bigint
.
但是sequence
只是创建列的一部分,也就是所谓的自增
PostgreSQL 的伪类型serial
是这样工作的:
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
要实现你想要的,你只需要定义自定义DEFAULT
表达式,如:
CREATE SEQUENCE city_city_id_seq;
CREATE TABLE city (
city_id text NOT NULL DEFAULT ('city' || nextval('city_city_id_seq'))
);
ALTER SEQUENCE city_city_id_seq OWNED BY city.city_id;