【问题标题】:Table field with combined fields values in PostgreSQLPostgreSQL 中具有组合字段值的表字段
【发布时间】:2021-09-13 12:50:42
【问题描述】:

我想创建一个表 ex。 。其中 Person 有 namelast_name。我想添加第三个名为 full_name 的字段,它是 姓名和姓氏的组合

CREATE TABLE person(
   id BIGINT,
   name VARCHAR(50),
   last_name VARCHAR(50),
   full_name VARCHAR(100) *COMBINE(name,last_name)
)

我知道我可以像这里 Combine two columns and add into one new column 这样创建一个函数

CREATE FUNCTION combined(rec person)
  RETURNS text
  LANGUAGE SQL
AS $$
  SELECT $1.name || $1.last_name;
$$; 

SELECT *, person.combined FROM person;

但是我想在表中声明为另一个字段,可以吗?

【问题讨论】:

    标签: sql postgresql field combinations


    【解决方案1】:

    您可以添加计算列:

    alter table person add column full_name text generated always as
        (name || last_name) stored;
    

    Here 是一个 dbfiddle。

    【讨论】:

    • 它在“GENERATED”处或附近抛出错误语法错误
    • CREATE TABLE person (id BIGINT DEFAULT nextval('id_sequence') 约束 pk_id_person 主键,first_name VARCHAR(50),last_name VARCHAR(50) NOT null,display_name 文本始终生成为 (first_name || last_name ) 存储);
    • @CésarCastroAroche 。 . .啊。 Postgres 12 中添加了生成的列。您可能只想使用视图。
    【解决方案2】:

    在 Postgres 12 中:

    CREATE TABLE person ( 
         id BIGINT DEFAULT nextval('id_sequence') CONSTRAINT pk_id_person 
                 PRIMARY KEY, 
         first_name VARCHAR(50), 
         last_name VARCHAR(50) NOT null, 
         full_name VARCHAR(100) GENERATED ALWAYS AS ( first_name || last_name ) stored ); 
    

    旧版 Postgres:

    创建一个没有全名的表。并添加一个像这样组合字段的视图:

    CREATE VIEW person_view AS
    SELECT id, first_name, last_name, (first_name || last_name) as full_name
    FROM person;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多