sql - 如何在 Postgres 中创建带有公共(public)前缀(即 tag_1、tag_2、tag_3)的字符串的序列号

标签 sql postgresql

在 Postrges 中,我知道如何创建一个表,其中的列具有序列(数字)id:

CREATE TABLE Tag (
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL
);

不过,我更喜欢让我的 ID 具有人类可读的一面。我通常会执行类似 tag_1, tag_2, tag_3 usr_1, usr_2, usr_3 的操作。

我已经看过有关如何生成 uuid ( Generating a UUID in Postgres for Insert statement? ) 的说明,但我并不真正需要它。基本序列号已经足够了,我只想在开头添加前缀 tag_

如何创建带有公共(public)前缀的序列号?

最佳答案

您可以使用一个序列来做到这一点,您可以将其作为通过 || 连接的默认值添加到表中。使用您想要的前缀,例如

CREATE SEQUENCE tag_seq START WITH 1;

CREATE TABLE tag 
    (id TEXT NOT NULL DEFAULT 'tag_'||nextval('tag_seq'::regclass), 
    name TEXT);
    
INSERT INTO tag (name) VALUES ('foo'),('bar');    
SELECT * FROM tag;
  id   | name 
-------+------
 tag_1 | foo
 tag_2 | bar
(2 Zeilen)

演示: db<>fiddle

关于sql - 如何在 Postgres 中创建带有公共(public)前缀(即 tag_1、tag_2、tag_3)的字符串的序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62400011/

相关文章:

mysql - 使用 NOT IN 子查询返回 0 行的查询

sql - varchar 的透视列

使用 Model.objects.create() 时未调用 Django 模型 save() 方法

sql - 基于两个表的select CASE语句

sql - 如何在sql中使用带有select top的max函数

sql - 仅在备份成功时删除数据库

database - 重新启动 PostgreSQL 后,我所有的表都是空的(零行)

sql - 来自 SQLite 的等效 PostgreSQL 查询

c# - NpgsqlConnection 和 OpenAsync() 方法导致 NullReferenceExeption

postgresql - 如何在 Postgres 的 uuid 列中插入值?