添加新列后,是否可以仅使用一个查询插入该列的值?
表格
id | category | level | new_column_name
---+-------------+-------+----------------
1 | Character | 3 |
2 | Character | 2 |
3 | Character | 2 |
4 | Character | 5 |
我需要做类似
的事情INSERT INTO table_name
(new_column_name)
VALUES
('foo'), -- value for new_column_name : row1
('bar'), -- value for new_column_name : row2
...
;
我已经使用postgresql cli进行了类似的查询以插入值,但是因为未设置的列值使用null
而失败,其中一个(id)是PRIMARY_KEY,所以它不能#t; t是NULL。
这是它记录的错误:
ERROR: null value in column "id" violates not-null constraint
DETAIL: Failing row contains (null, null, null, 1359).
修改
我所做的更多是更新而不是插入,但我能做的是一次插入所有不同的值。
例如,如果可能的话,我会避免这样做:
UPDATE table_name
SET new_column_name = 'foo'
WHERE id = 1;
UPDATE table_name
SET new_column_name = 'bar',
WHERE id = 2;
--...
答案 0 :(得分:1)
您可以使用巨大的CASE
:
UPDATE table_name
SET new_column_name
= CASE WHEN id = 1 THEN 'foo'
WHEN id = 2 THEN 'bar'
END;
答案 1 :(得分:1)
您可以使用VALUES
来构建包含要更新的值的内联表。:
UPDATE table_name AS v
SET new_column_name = s.val
FROM (VALUES (1, 'foo'), (2, 'bar')) AS s(id, val)
WHERE v.id = s.id