我试图在单个查询中更新主机列表。
类似......
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记录。
答案 0 :(得分:1)
您的问题似乎在混淆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
功能进行尝试插入,如果不是更新。
答案 1 :(得分:0)
插入没有where where
INSERT INTO
hosts ('address', 'display_name')
VALUES ([['192.168.0.1', 'localhost', '...more'], ['192.168.0.2',
'localhost2', '...more']]);
更新你应该使用
Update HOSTS
SET display_name = concat('local_host' , spli_part(address, '.',4));
where address in ('192.168.0.1','192.168.0.2', .....)