gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:08:23 25 4
gpt4 key购买 nike

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

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

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

假设我有这些数据:

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

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

我希望在 numbers 表上创建一个新列 value3,在创建时,它始终等于其对应的 value1 的总和value2 列。

例如:

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 列的步骤?

最佳答案

我发现了一个简单的方法!以下代码添加了具有所需初始值的 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 有一个 native 函数用于您要应用于新列的计算时,此方法很好。例如。在这种情况下,我想要的计算是“求和”,而 postgres 通过 + 运算符来实现。对于 postgres 本身不提供的操作,此方法将更加复杂。

关于postgresql - Postgres 添加具有初始计算值的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49368451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com