我试图在单个查询中更新主机列表。
有点像......
INSERT INTO
hosts ('address', 'display_name')
VALUES ([['192.168.0.1', 'localhost', '...more'], ['192.168.0.2', 'localhost2', '...more']]);
WHERE host.address = ['192.168.0.1','192.168.0.2', ... ]
但我真的不确定该怎么做?
我想一次强制更新 10k 条记录。
最佳答案
您的问题似乎混淆了 INSERT
和 UPDATE
。如果您想INSERT
,这很容易。它只是一个逗号分隔的元组列表:
INSERT INTO hosts ('address', 'display_name') VALUES
('192.168.0.1', 'localhost1'),
-- etc.
('192.168.0.2', 'localhost2')
;
对于 UPDATE
,假设您可以将 address
视为主键,您可以传递相同的大值列表并加入它,如下所示:
UPDATE hosts
SET display_name = x.n
FROM (VALUES
('192.168.0.1', 'localhost1'),
-- etc.
('192.168.0.2', 'localhost2')
) x(ip, n)
WHERE hosts.address = x.ip
;
如果您运行的是 Postgres 9.5,您还可以使用新的 ON CONFLICT
功能来执行 try-to-insert-and-if-not-then-update。
关于sql - 希望在一份声明中更新现有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37898264/