如何在PostgreSQL中创建字母数字序列

4

我需要创建字母数字序列。 例如:我有两个表,城市和学生。 我希望城市的序列是像“city1,city2,city3...”这样的,而学生的序列是像“stud1,stud2,stud3”等等。

谢谢。


1
请编辑您的问题并提供更多信息。您尝试了什么?为什么它不起作用?表格长什么样子? - mhlz
2个回答

6
一个序列不能是字母数字混合的。实际上,在PostgreSQL中,你甚至不能限制为一个更小的数值类型:它总是bigint
但是,序列只是创建列的一部分,就像所谓的自动增量一样。
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;

非常感谢,那个完美地奏效了。 - SHRUTAYU Kale

4
您可以使用BEFORE INSERT触发器来实现。该触发器可以从序列中获取一个数字并将一个单词添加到其中。
另一种选择是在表上方使用简单的VIEW
更新:使用自定义默认值,例如DEFAULT ('city' || nextval('city_city_id_seq'))(来自pozs的答案)比使用触发器更好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接