am
pg_upgrade
есть --link
, да. Только что толку, если все равно прочитать все надо.Size: a a a
am
pg_upgrade
есть --link
, да. Только что толку, если все равно прочитать все надо.DS
DS
VY
pg_upgrade
есть --link
, да. Только что толку, если все равно прочитать все надо.am
VY
am
K
VY
VY
am
D
R
am
am
D
CREATE TABLE messages_test (
id bigint PRIMARY key,
message text,
ts timestamptz
);
INSERT INTO messages_test SELECT a.id, a.id::text, now() FROM generate_series(1,5000000) AS a(id);
ANALYZE messages_test;
DO $$
DECLARE
v_i int;
v_exists bool;
BEGIN
FOR v_i IN 4000000..6000000 LOOP
v_exists := 1 FROM messages_test WHERE id = v_i;
IF v_exists THEN
UPDATE messages_test SET ts = now() WHERE id = v_i;
ELSE
INSERT INTO messages_test(id, message, ts) VALUES (v_i, v_i::text, now());
END IF;
END LOOP;
END $$ LANGUAGE plpgsql;
-- 31.377 s
SELECT max(id) FROM messages_test; -- 6000000
SELECT min(ts), max(ts) FROM messages_test; -- 2021-01-26 18:27:47 2021-01-26 18:28:05
-- 24.783 s
DO $$
DECLARE
v_i int;
BEGIN
FOR v_i IN 4000000..6000000 LOOP
INSERT INTO messages_test(id, message, ts) VALUES (v_i, v_i::text, now())
ON CONFLICT (id) DO UPDATE SET ts = now();
END LOOP;
END $$ LANGUAGE plpgsql;
SELECT max(id) FROM messages_test; -- 6000000
SELECT min(ts), max(ts) FROM messages_test; -- 2021-01-26 18:29:59 2021-01-26 18:32:10
am
CREATE TABLE messages_test (
id bigint PRIMARY key,
message text,
ts timestamptz
);
INSERT INTO messages_test SELECT a.id, a.id::text, now() FROM generate_series(1,5000000) AS a(id);
ANALYZE messages_test;
DO $$
DECLARE
v_i int;
v_exists bool;
BEGIN
FOR v_i IN 4000000..6000000 LOOP
v_exists := 1 FROM messages_test WHERE id = v_i;
IF v_exists THEN
UPDATE messages_test SET ts = now() WHERE id = v_i;
ELSE
INSERT INTO messages_test(id, message, ts) VALUES (v_i, v_i::text, now());
END IF;
END LOOP;
END $$ LANGUAGE plpgsql;
-- 31.377 s
SELECT max(id) FROM messages_test; -- 6000000
SELECT min(ts), max(ts) FROM messages_test; -- 2021-01-26 18:27:47 2021-01-26 18:28:05
-- 24.783 s
DO $$
DECLARE
v_i int;
BEGIN
FOR v_i IN 4000000..6000000 LOOP
INSERT INTO messages_test(id, message, ts) VALUES (v_i, v_i::text, now())
ON CONFLICT (id) DO UPDATE SET ts = now();
END LOOP;
END $$ LANGUAGE plpgsql;
SELECT max(id) FROM messages_test; -- 6000000
SELECT min(ts), max(ts) FROM messages_test; -- 2021-01-26 18:29:59 2021-01-26 18:32:10
D
D
VY