mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-17 19:13:16 +08:00
This commit moves a lot of test setup logic to runner.sh. Also passes the right commands to the regression infrastructure to create appropriate users and run tests as a regular user.
51 lines
3.1 KiB
SQL
51 lines
3.1 KiB
SQL
CREATE TABLE upsert_test(time timestamp PRIMARY KEY, temp float, color text);
|
|
SELECT create_hypertable('upsert_test', 'time');
|
|
INSERT INTO upsert_test VALUES ('2017-01-20T09:00:01', 22.5, 'yellow') RETURNING *;
|
|
INSERT INTO upsert_test VALUES ('2017-01-20T09:00:01', 23.8, 'yellow') ON CONFLICT (time)
|
|
DO UPDATE SET temp = 23.8 RETURNING *;
|
|
INSERT INTO upsert_test VALUES ('2017-01-20T09:00:01', 78.4, 'yellow') ON CONFLICT DO NOTHING;
|
|
SELECT * FROM upsert_test;
|
|
|
|
-- Referencing constraints by name does not yet work on Hypertables. Check for proper error message.
|
|
\set ON_ERROR_STOP 0
|
|
INSERT INTO upsert_test VALUES ('2017-01-20T09:00:01', 12.3, 'yellow') ON CONFLICT ON CONSTRAINT upsert_test_pkey
|
|
DO UPDATE SET temp = 12.3 RETURNING time, temp, color;
|
|
|
|
-- Test that update generates error on conflicts
|
|
INSERT INTO upsert_test VALUES ('2017-01-21T09:00:01', 22.5, 'yellow') RETURNING *;
|
|
UPDATE upsert_test SET time = '2017-01-20T09:00:01';
|
|
\set ON_ERROR_STOP 1
|
|
|
|
-- Test with UNIQUE index on multiple columns instead of PRIMARY KEY constraint
|
|
CREATE TABLE upsert_test_unique(time timestamp, temp float, color text);
|
|
SELECT create_hypertable('upsert_test_unique', 'time');
|
|
CREATE UNIQUE INDEX time_color_idx ON upsert_test_unique (time, color);
|
|
INSERT INTO upsert_test_unique VALUES ('2017-01-20T09:00:01', 22.5, 'yellow') RETURNING *;
|
|
INSERT INTO upsert_test_unique VALUES ('2017-01-20T09:00:01', 21.2, 'brown');
|
|
SELECT * FROM upsert_test_unique ORDER BY time, color DESC;
|
|
INSERT INTO upsert_test_unique VALUES ('2017-01-20T09:00:01', 31.8, 'yellow') ON CONFLICT (time, color)
|
|
DO UPDATE SET temp = 31.8;
|
|
INSERT INTO upsert_test_unique VALUES ('2017-01-20T09:00:01', 54.3, 'yellow') ON CONFLICT DO NOTHING;
|
|
SELECT * FROM upsert_test_unique ORDER BY time, color DESC;
|
|
|
|
-- Test with multiple UNIQUE indexes
|
|
CREATE TABLE upsert_test_multi_unique(time timestamp, temp float, color text);
|
|
SELECT create_hypertable('upsert_test_multi_unique', 'time');
|
|
CREATE UNIQUE INDEX multi_time_temp_idx ON upsert_test_multi_unique (time, temp);
|
|
CREATE UNIQUE INDEX multi_time_color_idx ON upsert_test_multi_unique (time, color);
|
|
INSERT INTO upsert_test_multi_unique VALUES ('2017-01-20T09:00:01', 25.9, 'yellow');
|
|
INSERT INTO upsert_test_multi_unique VALUES ('2017-01-21T09:00:01', 25.9, 'yellow');
|
|
INSERT INTO upsert_test_multi_unique VALUES ('2017-01-20T09:00:01', 23.5, 'brown');
|
|
INSERT INTO upsert_test_multi_unique VALUES ('2017-01-20T09:00:01', 25.9, 'purple') ON CONFLICT DO NOTHING;
|
|
SELECT * FROM upsert_test_multi_unique ORDER BY time, color DESC;
|
|
INSERT INTO upsert_test_multi_unique VALUES ('2017-01-20T09:00:01', 25.9, 'blue') ON CONFLICT (time, temp)
|
|
DO UPDATE SET color = 'blue';
|
|
SELECT * FROM upsert_test_multi_unique ORDER BY time, color DESC;
|
|
INSERT INTO upsert_test_multi_unique VALUES ('2017-01-21T09:00:01', 45.7, 'yellow') ON CONFLICT (time, color)
|
|
DO UPDATE SET temp = 45.7;
|
|
SELECT * FROM upsert_test_multi_unique ORDER BY time, color DESC;
|
|
\set ON_ERROR_STOP 0
|
|
INSERT INTO upsert_test_multi_unique VALUES ('2017-01-20T09:00:01', 23.5, 'purple') ON CONFLICT (time, color)
|
|
DO UPDATE set temp = 23.5;
|
|
\set ON_ERROR_STOP 1
|