我有两列,我希望第二列具有与第一列相同的值

问题描述

在PostgreSQL中,我有两列,我希望第二列始终具有与第一列相同的值。

这些列是landmark_id(整数)和name(varchar),我希望name列始终具有与landmark_id相同的值(id)。 / p>

landmark_id (integer) | name (varchar)
1                       1
2                       2
3                       3

解决方法

我不明白您为什么要这样做,但是我可以想到两种方法来完成您的请求。一种是通过使用生成的列

private void yesAction() {

    try {

        String text = Files.readString(Paths.get("src\\main\\database\\default.db"));

        System.out.println(text);

        Files.writeString(Paths.get("src\\main\\database\\main.db"),text,Charset.defaultCharset());

    } catch (IOException e) {

        e.printStackTrace();
    }
}

另一个是通过实施约束

CREATE TABLE g (
  landmark_id int,name varchar(100) GENERATED ALWAYS AS (landmark_id::varchar) STORED
)

这两种方法都会导致CREATE TABLE c ( landmark_id int,name varchar(100),CONSTRAINT equality_cc CHECK (landmark_id = name::varchar) ) 列占用磁盘空间。第一种方法不允许您在namename语句中指定INSERT列。在后一种情况下,插入时将被迫同时指定两列。 您还可以使用触发器来更新第二列。

最新编辑:建议使用其他视图。我同意这是一个比我写的更好的主意。

,

按照@jarlh在评论中的建议创建一个view。系统会自动为您自动生成name列。通常,与在实际表中多次存储基本上相同的数据相比,这通常是更可取的,在实际表中,数据占用更多的磁盘空间,并且也可能不同步。例如:

CREATE VIEW landmarks_names AS
SELECT landmark_id,landmark_id::text AS name
FROM landmarks;

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...