sql - 反转 postgres 中的列

标签 sql postgresql database-migration ddl

所以我在 SQL Server 中有一个这样定义的表

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

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

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

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

最佳答案

适用于 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 或更低版本

对于早期版本,您可以使用触发器,如下所示。

创建触发函数

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

关于sql - 反转 postgres 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65913162/

相关文章:

sql - 在配置单元中使用 QUALIFY Row_Number

sql - 根据条件求和sql中的列

windows - Windows 10 上的 Docker VM 磁盘大小

postgresql - 将 200GB 的 Postgres 数据从 9.0 迁移到 9.6

python - Django datetime.datetime 到 Decimal 不支持迁移

java - Hibernate获取列的数据缺失

php - 如何复制数据库记录并跟踪其新 ID

sql - 如何按两列分组以仅显示一行?

sql - 为什么 Postgres 执行顺序扫描,其中索引将返回 < 1% 的数据?

visual-studio-2012 - "need migration"对 Visual Studio 2012 中的 SQL Server 数据库项目意味着什么