mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-16 10:33:27 +08:00
Change truncate test to ignore warnings about potentially orphaned files when dropping the test database. This seems to happen quite frequently on appveyor causing the test to be flaky.
152 lines
4.2 KiB
PL/PgSQL
152 lines
4.2 KiB
PL/PgSQL
-- This file and its contents are licensed under the Apache License 2.0.
|
|
-- Please see the included NOTICE for copyright information and
|
|
-- LICENSE-APACHE for a copy of the license.
|
|
|
|
\o /dev/null
|
|
\ir include/insert_two_partitions.sql
|
|
\o
|
|
|
|
SELECT * FROM _timescaledb_catalog.hypertable;
|
|
SELECT * FROM _timescaledb_catalog.chunk;
|
|
SELECT * FROM test.show_subtables('"two_Partitions"');
|
|
SELECT * FROM "two_Partitions";
|
|
|
|
SET client_min_messages = WARNING;
|
|
TRUNCATE "two_Partitions";
|
|
|
|
SELECT * FROM _timescaledb_catalog.hypertable;
|
|
SELECT * FROM _timescaledb_catalog.chunk;
|
|
|
|
-- should be empty
|
|
SELECT * FROM test.show_subtables('"two_Partitions"');
|
|
SELECT * FROM "two_Partitions";
|
|
|
|
INSERT INTO public."two_Partitions"("timeCustom", device_id, series_0, series_1) VALUES
|
|
(1257987600000000000, 'dev1', 1.5, 1),
|
|
(1257987600000000000, 'dev1', 1.5, 2),
|
|
(1257894000000000000, 'dev2', 1.5, 1),
|
|
(1257894002000000000, 'dev1', 2.5, 3);
|
|
|
|
SELECT * FROM _timescaledb_catalog.chunk;
|
|
|
|
CREATE VIEW dependent_view AS SELECT * FROM _timescaledb_internal._hyper_1_5_chunk;
|
|
|
|
CREATE OR REPLACE FUNCTION test_trigger()
|
|
RETURNS TRIGGER LANGUAGE PLPGSQL AS
|
|
$BODY$
|
|
DECLARE
|
|
cnt INTEGER;
|
|
BEGIN
|
|
RAISE WARNING 'FIRING trigger when: % level: % op: % cnt: % trigger_name %',
|
|
tg_when, tg_level, tg_op, cnt, tg_name;
|
|
IF TG_OP = 'DELETE' THEN
|
|
RETURN OLD;
|
|
END IF;
|
|
RETURN NEW;
|
|
END
|
|
$BODY$;
|
|
|
|
-- test truncate on a chunk
|
|
CREATE TRIGGER _test_truncate_before
|
|
BEFORE TRUNCATE ON _timescaledb_internal._hyper_1_5_chunk
|
|
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
|
|
|
CREATE TRIGGER _test_truncate_after
|
|
AFTER TRUNCATE ON _timescaledb_internal._hyper_1_5_chunk
|
|
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
|
|
|
\set ON_ERROR_STOP 0
|
|
TRUNCATE "two_Partitions";
|
|
-- cannot TRUNCATE ONLY a hypertable
|
|
TRUNCATE ONLY "two_Partitions" CASCADE;
|
|
\set ON_ERROR_STOP 1
|
|
|
|
-- create a regular table to make sure we can truncate it in the same call
|
|
CREATE TABLE truncate_normal (color int);
|
|
INSERT INTO truncate_normal VALUES (1);
|
|
SELECT * FROM truncate_normal;
|
|
|
|
-- fix for bug #3580
|
|
\set ON_ERROR_STOP 0
|
|
TRUNCATE nonexistentrelation;
|
|
\set ON_ERROR_STOP 1
|
|
CREATE TABLE truncate_nested (color int);
|
|
INSERT INTO truncate_nested VALUES (2);
|
|
|
|
SELECT * FROM truncate_normal, truncate_nested;
|
|
|
|
CREATE FUNCTION fn_truncate_nested()
|
|
RETURNS trigger LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
TRUNCATE truncate_nested;
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|
|
|
|
CREATE TRIGGER tg_truncate_nested
|
|
BEFORE TRUNCATE ON truncate_normal
|
|
FOR EACH STATEMENT EXECUTE FUNCTION fn_truncate_nested();
|
|
|
|
TRUNCATE truncate_normal;
|
|
SELECT * FROM truncate_normal, truncate_nested;
|
|
|
|
INSERT INTO truncate_normal VALUES (3);
|
|
INSERT INTO truncate_nested VALUES (4);
|
|
|
|
SELECT * FROM truncate_normal, truncate_nested;
|
|
|
|
TRUNCATE truncate_normal;
|
|
SELECT * FROM truncate_normal, truncate_nested;
|
|
|
|
INSERT INTO truncate_normal VALUES (5);
|
|
INSERT INTO truncate_nested VALUES (6);
|
|
SELECT * FROM truncate_normal, truncate_nested;
|
|
|
|
SELECT * FROM test.show_subtables('"two_Partitions"');
|
|
|
|
TRUNCATE "two_Partitions", truncate_normal CASCADE;
|
|
-- should be empty
|
|
SELECT * FROM test.show_subtables('"two_Partitions"');
|
|
SELECT * FROM "two_Partitions";
|
|
SELECT * FROM truncate_normal, truncate_nested;
|
|
|
|
-- test TRUNCATE can be performed by a user
|
|
-- with TRUNCATE privilege who is not table owner
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
|
|
CREATE ROLE owner WITH LOGIN;
|
|
CREATE ROLE truncator WITH LOGIN;
|
|
CREATE DATABASE test_trunc_ht OWNER owner;
|
|
|
|
\c test_trunc_ht :ROLE_SUPERUSER
|
|
SET client_min_messages = ERROR;
|
|
CREATE EXTENSION timescaledb;
|
|
RESET client_min_messages;
|
|
|
|
\c test_trunc_ht owner
|
|
CREATE TABLE test_hypertable (time TIMESTAMP WITHOUT TIME ZONE NOT NULL, value DOUBLE PRECISION);
|
|
SELECT create_hypertable('test_hypertable', 'time');
|
|
|
|
-- fail since we don't have TRUNCATE privileges yet
|
|
\set ON_ERROR_STOP 0
|
|
|
|
\c test_trunc_ht truncator
|
|
TRUNCATE TABLE test_hypertable;
|
|
|
|
\set ON_ERROR_STOP 1
|
|
|
|
\c test_trunc_ht owner
|
|
GRANT TRUNCATE ON test_hypertable TO truncator;
|
|
|
|
-- now succeed after privilege was granted
|
|
\c test_trunc_ht truncator;
|
|
TRUNCATE TABLE test_hypertable;
|
|
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
-- set client_min_messages to ERROR to suppress warnings about orphaned files
|
|
SET client_min_messages TO ERROR;
|
|
DROP DATABASE test_trunc_ht;
|
|
DROP ROLE owner;
|
|
DROP ROLE truncator;
|