timescaledb/test/expected/ddl_errors.out
Erik Nordström e2e7e5f286 Make hypertables support replica identity
Add support for setting replica identity on hypertables via ALTER
TABLE. The replica identity is used in logical replication to identify
rows that have changed.

Currently, replica identity can only be altered on hypertables via the
root; changing it directly on chunks will raise an error.
2023-06-27 15:07:40 +02:00

135 lines
6.7 KiB
Plaintext

-- 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.
CREATE TABLE PUBLIC."Hypertable_1" (
time BIGINT NOT NULL,
"Device_id" TEXT NOT NULL,
temp_c int NOT NULL DEFAULT -1
);
CREATE INDEX ON PUBLIC."Hypertable_1" (time, "Device_id");
\set ON_ERROR_STOP 0
SELECT * FROM create_hypertable(NULL, NULL);
ERROR: relation cannot be NULL
SELECT * FROM create_hypertable('"public"."Hypertable_1"', NULL);
ERROR: time column cannot be NULL
-- integer time dimensions require an explicit interval
SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'time');
ERROR: integer dimensions require an explicit interval
-- space dimensions require explicit number of partitions
SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'time', 'Device_id', chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
ERROR: invalid number of partitions for dimension "Device_id"
SELECT * FROM create_hypertable('"public"."Hypertable_1_mispelled"', 'time', 'Device_id', 2, chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
ERROR: relation "public.Hypertable_1_mispelled" does not exist at character 33
SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'time_mispelled', 'Device_id', 2, chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
ERROR: column "time_mispelled" does not exist
SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'Device_id', 'Device_id', 2, chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
ERROR: invalid type for dimension "Device_id"
SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'time', 'Device_id_mispelled', 2, chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
ERROR: column "Device_id_mispelled" does not exist
INSERT INTO PUBLIC."Hypertable_1" VALUES(1,'dev_1', 3);
SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'time', 'Device_id', 2, chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
ERROR: table "Hypertable_1" is not empty
DELETE FROM PUBLIC."Hypertable_1" ;
\set ON_ERROR_STOP 1
SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'time', 'Device_id', 2, chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
hypertable_id | schema_name | table_name | created
---------------+-------------+--------------+---------
1 | public | Hypertable_1 | t
(1 row)
\set ON_ERROR_STOP 0
SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'time', 'Device_id', 2, chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
ERROR: table "Hypertable_1" is already a hypertable
\set ON_ERROR_STOP 1
INSERT INTO "Hypertable_1" VALUES (0, 1, 0);
\set ON_ERROR_STOP 0
ALTER TABLE _timescaledb_internal._hyper_1_1_chunk ALTER COLUMN temp_c DROP NOT NULL;
ERROR: operation not supported on chunk tables
\set ON_ERROR_STOP 1
CREATE TABLE PUBLIC."Parent" (
time BIGINT NOT NULL,
"Device_id" TEXT NOT NULL,
temp_c int NOT NULL DEFAULT -1
);
\set ON_ERROR_STOP 0
ALTER TABLE "Hypertable_1" INHERIT "Parent";
ERROR: hypertables do not support inheritance
ALTER TABLE _timescaledb_internal._hyper_1_1_chunk INHERIT "Parent";
ERROR: operation not supported on chunk tables
ALTER TABLE _timescaledb_internal._hyper_1_1_chunk NO INHERIT "Parent";
ERROR: operation not supported on chunk tables
\set ON_ERROR_STOP 1
CREATE TABLE PUBLIC."Child" () INHERITS ("Parent");
\set ON_ERROR_STOP 0
SELECT * FROM create_hypertable('"public"."Parent"', 'time', chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
ERROR: table "Parent" is already partitioned
SELECT * FROM create_hypertable('"public"."Child"', 'time', chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
ERROR: table "Child" is already partitioned
\set ON_ERROR_STOP 1
CREATE UNLOGGED TABLE PUBLIC."Hypertable_unlogged" (
time BIGINT NOT NULL,
"Device_id" TEXT NOT NULL,
temp_c int NOT NULL DEFAULT -1
);
\set ON_ERROR_STOP 0
SELECT * FROM create_hypertable('"public"."Hypertable_unlogged"', 'time', chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
ERROR: table "Hypertable_unlogged" has to be logged
\set ON_ERROR_STOP 1
ALTER TABLE PUBLIC."Hypertable_unlogged" SET LOGGED;
SELECT * FROM create_hypertable('"public"."Hypertable_unlogged"', 'time', chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
hypertable_id | schema_name | table_name | created
---------------+-------------+---------------------+---------
2 | public | Hypertable_unlogged | t
(1 row)
CREATE TEMP TABLE "Hypertable_temp" (
time BIGINT NOT NULL,
"Device_id" TEXT NOT NULL,
temp_c int NOT NULL DEFAULT -1
);
\set ON_ERROR_STOP 0
SELECT * FROM create_hypertable('"Hypertable_temp"', 'time', chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
ERROR: table "Hypertable_temp" has to be logged
ALTER TABLE "Hypertable_1" SET UNLOGGED;
ERROR: logging cannot be turned off for hypertables
\set ON_ERROR_STOP 1
ALTER TABLE "Hypertable_1" SET LOGGED;
CREATE TABLE PUBLIC."Hypertable_1_rule" (
time BIGINT NOT NULL,
"Device_id" TEXT NOT NULL,
temp_c int NOT NULL DEFAULT -1
);
CREATE RULE notify_me AS ON UPDATE TO "Hypertable_1_rule" DO ALSO NOTIFY "Hypertable_1_rule";
\set ON_ERROR_STOP 0
SELECT * FROM create_hypertable('"public"."Hypertable_1_rule"', 'time', chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
ERROR: hypertables do not support rules
\set ON_ERROR_STOP 1
ALTER TABLE "Hypertable_1_rule" DISABLE RULE notify_me;
\set ON_ERROR_STOP 0
SELECT * FROM create_hypertable('"public"."Hypertable_1_rule"', 'time', chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
ERROR: hypertables do not support rules
\set ON_ERROR_STOP 1
DROP RULE notify_me ON "Hypertable_1_rule";
SELECT * FROM create_hypertable('"public"."Hypertable_1_rule"', 'time', chunk_time_interval=>_timescaledb_internal.interval_to_usec('1 month'));
hypertable_id | schema_name | table_name | created
---------------+-------------+-------------------+---------
3 | public | Hypertable_1_rule | t
(1 row)
\set ON_ERROR_STOP 0
CREATE RULE notify_me AS ON UPDATE TO "Hypertable_1_rule" DO ALSO NOTIFY "Hypertable_1_rule";
ERROR: hypertables do not support rules
\set ON_ERROR_STOP 1
\set ON_ERROR_STOP 0
SELECT add_dimension(NULL,NULL);
ERROR: hypertable cannot be NULL
\set ON_ERROR_STOP 1
\set ON_ERROR_STOP 0
SELECT attach_tablespace(NULL,NULL);
ERROR: invalid tablespace name
\set ON_ERROR_STOP 1
\set ON_ERROR_STOP 0
select set_number_partitions(NULL,NULL);
ERROR: hypertable cannot be NULL
\set ON_ERROR_STOP 1