【发布时间】:2020-08-10 08:48:10
【问题描述】:
我有一个包含两列(标识符和日期)的 postgres 表,它们是复合主键。我想在另一列中对串联进行哈希处理,每次插入新记录时都会生成这个值。为此,我正在尝试更改我的表以创建生成的列:
ALTER TABLE my_table ADD COLUMN hash_id_date VARCHAR(50)
GENERATED ALWAYS AS (MD5(my_table.original_id||'-'||my_table.time))
STORED;
这引发了以下错误:
ERROR: syntax error at or near "("
LINE 4: GENERATED ALWAYS AS (MD5(my_table.original_id,'-',my_table.t...
^
SQL state: 42601
Character: 178
我正在疯狂地寻找语法错误在哪里......我已经阅读了STABLE 和IMMUTABLE 函数,并且生成的列应该始终有一个IMMUTABLE 函数作为表达式。据我所知MD5 是IMMUTABLE 但错误消息甚至无法达到那个级别。
有什么帮助吗?
【问题讨论】:
-
我会尝试从计算的子句中删除一个元素,以找出导致它的原因 - 例如,尝试 AS ((my_table.original_id||'-'||my_table.time )) 不使用 MD5,尝试不使用 concat 等...
-
select version();带给你什么? -
是的,@a_horse_with_no_name,你的怀疑是对的。我当前的版本不支持生成的列。我目前正在创建一个新列并尝试使用触发器模拟它,但是我当前的行不受此影响。我正在尝试使用每一行的值更新我的表。
标签: postgresql alter-table generated-columns