gpt4 book ai didi

postgresql - 在 Postgresql 中创建生成的列时出错

转载 作者:行者123 更新时间:2023-12-05 00:54:20 24 4
gpt4 key购买 nike

CREATE TABLE Person (
id serial primary key,
accNum text UNIQUE GENERATED ALWAYS AS (
concat(right(cast(extract year from current_date) as text), 2), cast(id as text)) STORED
);

错误:生成表达式不是不可变的

目标是用 YYid 填充 accNum 字段,其中 YY 是添加此人时年份的最后两个字母。

我也试过'||'运营商,但没有成功。

最佳答案

由于您不希望更新列,因此当行更改时,您可以定义自己的生成数字的函数:

create function generate_acc_num(id int)
returns text
as
$$
select to_char(current_date, 'YY')||id::text;
$$
language sql
immutable; --<< this is lying to Postgres!

请注意,您应该切勿将此功能用于任何其他目的。 特别是不作为索引表达式。

然后你可以在生成的列中使用它:

CREATE TABLE Person 
(
id integer generated always as identity primary key,
acc_num text UNIQUE GENERATED ALWAYS AS (generate_acc_num(id)) STORED
);

关于postgresql - 在 Postgresql 中创建生成的列时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66474287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com