You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL插入时将两列值合并至第三列的实现方案

问题描述

尝试执行以下SQL语句创建表:

CREATE TABLE test_table 
(
    column_1 varchar(255),
    column_2 varchar(255),
    combined varchar(255) DEFAULT concat(column_1, '_', column_2)
);

执行后出现错误:

ERROR: cannot use column reference in DEFAULT expression

需求是在插入操作时自动将column_1和column_2的内容合并到combined列,示例如下:

INSERT INTO test_table (column_1, column_2) 
VALUES ('Alpha', 'Beta');

SELECT * FROM test_table;
-- 预期结果:('Alpha', 'Beta', 'Alpha_Beta')

备注:

  • 输入始终为字符串类型
  • 输入内容长度通常不超过20字符
  • 无法生成dbfiddle链接
解决方案结论

使用**生成列(GENERATED ALWAYS)可实现将合并值存储在第三列的需求;而视图(VIEW)**方案更优,能够避免数据冗余。已知输入不会为空或NULL,该条件初始提问未提及。

生成列(GENERATED ALWAYS)方案

创建表时将combined定义为存储型生成列,由column_1和column_2自动计算生成,无需手动维护:

CREATE TABLE test_table 
(
    column_1 varchar(255),
    column_2 varchar(255),
    combined varchar(255) GENERATED ALWAYS AS (concat(column_1, '_', column_2)) STORED
);

插入数据时仅需指定column_1和column_2的值,combined列会自动生成对应合并内容。

视图(VIEW)方案

不在原表中存储combined列,而是创建视图实时计算合并值,从根源避免数据冗余:

-- 先创建基础表
CREATE TABLE test_table 
(
    column_1 varchar(255),
    column_2 varchar(255)
);

-- 创建包含合并列的视图
CREATE VIEW test_table_with_combined AS
SELECT column_1, column_2, concat(column_1, '_', column_2) AS combined
FROM test_table;

插入数据到基础表后,查询视图即可获取包含合并值的完整结果:

INSERT INTO test_table (column_1, column_2) VALUES ('Alpha', 'Beta');
SELECT * FROM test_table_with_combined;
-- 返回结果:('Alpha', 'Beta', 'Alpha_Beta')

内容的提问来源于stack exchange,提问作者Cogito Ergo Sum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:27:17