Postgres 添加具有初始计算值的列

2024-01-27

我正在寻找向预先存在的表添加一个新列,该表填充了值。新专栏将是NOT NULL,因此对于每个预先存在的行,它都需要一个值。

我正在寻找此列上的初始值,该初始值是根据创建列时表中的其他值计算的,并且only在创建列时。

我有一个非常具体的用例,所以我不是在寻找解决方法。我将给出一个非常简单的例子来说明我正在寻找的内容:

假设我有这些数据:

CREATE TABLE numbers (
  value1 INTEGER NOT NULL,
  value2 INTEGER NOT NULL
);

INSERT INTO numbers(value1, value2) VALUES (10, 20), (2, 5);

我想创建一个新专栏value3 on the numbers表在创建时始终等于其对应的表的总和value1 and value2列。

E.g.:

ALTER TABLE numbers ADD COLUMN value3 INTEGER;

/* ... some more logic which calculates the initial values ... */

ALTER TABLE numbers
ALTER COLUMN value3 SET NOT NULL;

完成此操作后,我想要以下数据:

-- The 3rd value will be the sum of the first 2 values
SELECT * FROM numbers;

value1 | value2 | value3
-------+--------+-------
10     | 20     | 30
2      | 5      | 7

我稍后需要更新数据,也许会破坏这种关系value3 === (value1 + value2):

UPDATE numbers SET value3=9823 WHERE value1=10;

如何实现将计算出的初始值插入到value3 column?


我发现了一个简单的方法!下面添加了value3具有所需初始值的列:

ALTER TABLE numbers
ADD COLUMN value3 INTEGER; -- Exclude the NOT NULL constraint here

UPDATE numbers SET value3=value1+value2; -- Insert data with a regular UPDATE

ALTER TABLE numbers
ALTER COLUMN value3 SET NOT NULL; -- Now set the NOT NULL constraint

当 postgres 有用于计算您想要应用于新列的本机函数时,此方法非常有用。例如。在这种情况下,我想要的计算是“总和”,postgres 通过+操作员。对于 postgres 本身不提供的操作,此方法会更加复杂。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgres 添加具有初始计算值的列 的相关文章

随机推荐