PostgreSQL现有表添加生成列报错求助:语法错误排查
问题解决:PostgreSQL生成列添加报错
错误原因
你的SQL语句存在两个关键问题:
- 表达式中
timestamp("dateTime")语法错误:dateTime本身已经是timestamp类型,无需用timestamp()函数转换,这种写法导致PostgreSQL解析失败。 - 生成列类型与表达式结果不匹配:你定义生成列类型为
timestamp without time zone,但表达式最后转成了date类型,类型冲突。
正确SQL语句
根据你的需求选择对应语句:
情况1:生成date类型的日期列
如果只需要日期部分(无时间),将生成列类型设为date:
ALTER TABLE public.transaction ADD COLUMN "transactionDate" date GENERATED ALWAYS AS ("dateTime"::date) STORED;
情况2:生成timestamp类型的日期列(时间为00:00:00)
如果要保留timestamp类型但仅保留日期部分,使用date_trunc函数:
ALTER TABLE public.transaction ADD COLUMN "transactionDate" timestamp without time zone GENERATED ALWAYS AS (date_trunc('day', "dateTime")) STORED;
内容的提问来源于stack exchange,提问作者Ganga Singh
相关产品推荐
相关产品推荐

