反转 postgres 中的列

Reverse a column in postgres

所以我在 SQL 服务器中有一个 table 是这样定义的

create table test(value varchar(200), Reverse(value) as valueReverse);

现在,当我在此 table 中插入内容时,假设我插入了字符串 hello,它会将值存储在 table 中。

value | valueReverse
--------------------
hello | olleh

我正在尝试将 table 转换为 PostgreSQL,但是 reverse() 函数不起作用,它给我错误。在 postgres 中创建此 table 的正确方法是什么?

对于 PostgreSQL 12 及更高版本

如果您使用的是 Postgres 12 或更高版本,那么您可以对 valueReverse 列使用 GENERATED ALWAYS AS,如下所示:Manual

create table test(value varchar(200),
valueReverse varchar(200) generated always as (reverse(value)) STORED );

DEMO

对于 PostgreSQL 11 或更低版本

对于早期版本,您可以像下面那样使用 Triggers

创建触发器函数

create or replace function trig_reverse() returns trigger as
$$
begin
new.valueReverse=reverse(new.value);
return new;
end;
$$
language plpgsql

创建触发器

create trigger trig_rev 
before insert or update on test 
for each row 
execute procedure trig_reverse();

DEMO

不要不要 存储字符串两次(冗余)。将它存储一次并即时生成恢复的副本,总体上会更干净、更便宜。如果您需要直接替换 table:

,您可以使用 VIEW
CREATE TABLE base_test(value varchar(200));
INSERT INTO base_test VALUES ('hello');
 
CREATE VIEW test AS
SELECT *, reverse(value) AS value_reverse
FROM   base_test;

db<>fiddle here

相关:

  • Computed / calculated / virtual / derived columns in PostgreSQL