Skip to content

Commit

Permalink
Tests for foreign keys into hypertable with OSM chunk
Browse files Browse the repository at this point in the history
  • Loading branch information
gayyappan committed Aug 7, 2024
1 parent a1f8e48 commit 7cece1b
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 4 deletions.
50 changes: 50 additions & 0 deletions tsl/test/expected/chunk_utils_internal.out
Original file line number Diff line number Diff line change
Expand Up @@ -1567,6 +1567,56 @@ INSERT INTO osm_slice_update VALUES (1);
psql:include/chunk_utils_internal_orderedappend.sql:178: ERROR: Cannot insert into tiered chunk range of public.osm_slice_update - attempt to create new chunk with range [0 10] failed
INSERT INTO osm_slice_update VALUES (1);
psql:include/chunk_utils_internal_orderedappend.sql:179: ERROR: Cannot insert into tiered chunk range of public.osm_slice_update - attempt to create new chunk with range [0 10] failed
\set ON_ERROR_STOP 1
--TEST hypertable with foreign key into it
\c :TEST_DBNAME :ROLE_4
CREATE TABLE hyper_fk(ts timestamptz primary key, device text, value float);
SELECT table_name FROM create_hypertable('hyper_fk', 'ts');
table_name
------------
hyper_fk
(1 row)

INSERT INTO hyper_fk(ts, device, value) VALUES ('2020-01-01 00:00:00+00', 'd1', 1.0);
\c postgres_fdw_db :ROLE_4
CREATE TABLE fdw_hyper_fk(ts timestamptz NOT NULL, device text, value float);
INSERT INTO fdw_hyper_fk VALUES( '2021-05-05 00:00:00+00', 'd2', 2.0);
\c :TEST_DBNAME :ROLE_4
-- this is a stand-in for the OSM table
CREATE FOREIGN TABLE child_hyper_fk
(ts timestamptz NOT NULL, device text, value float)
SERVER s3_server OPTIONS ( schema_name 'public', table_name 'fdw_hyper_fk');
SELECT _timescaledb_functions.attach_osm_table_chunk('hyper_fk', 'child_hyper_fk');
attach_osm_table_chunk
------------------------
t
(1 row)

--create table with fk into hypertable
CREATE TABLE event(ts timestamptz REFERENCES hyper_fk(ts) , info text);
\set ON_ERROR_STOP 0
-- NOTE: current behavior is to allow inserts/deletes from PG tables when data
-- references OSM table.
--insert referencing OSM chunk
INSERT INTO event VALUES( '2021-05-05 00:00:00+00' , 'osm_chunk_ts');
--insert referencing non-existent value
INSERT INTO event VALUES( '2020-01-02 00:00:00+00' , 'does_not_exist_ts');
ERROR: insert or update on table "event" violates foreign key constraint "event_ts_fkey"
INSERT INTO event VALUES( '2020-01-01 00:00:00+00' , 'chunk_ts');
SELECT * FROM event ORDER BY ts;
ts | info
------------------------------+--------------
Tue Dec 31 16:00:00 2019 PST | chunk_ts
Tue May 04 17:00:00 2021 PDT | osm_chunk_ts
(2 rows)

DELETE FROM event WHERE info = 'osm_chunk_ts';
DELETE FROM event WHERE info = 'chunk_ts';
SELECT * FROM event ORDER BY ts;
ts | info
----+------
(0 rows)

\set ON_ERROR_STOP 1
-- clean up databases created
\c :TEST_DBNAME :ROLE_SUPERUSER
Expand Down
20 changes: 16 additions & 4 deletions tsl/test/sql/chunk_utils_internal.sql
Original file line number Diff line number Diff line change
Expand Up @@ -656,10 +656,10 @@ DROP INDEX hyper_constr_mid_idx;
CREATE TABLE hyper_fk(ts timestamptz primary key, device text, value float);
SELECT table_name FROM create_hypertable('hyper_fk', 'ts');

INSERT INTO hyper_fk(ts, device, value) VALUES ('2020-01-01 00:00:00', 'd1', 1.0);
INSERT INTO hyper_fk(ts, device, value) VALUES ('2020-01-01 00:00:00+00', 'd1', 1.0);
\c postgres_fdw_db :ROLE_4
CREATE TABLE fdw_hyper_fk(ts timestamptz NOT NULL, device text, value float);
INSERT INTO fdw_hyper_fk VALUES( '2021-05-05 00:00', 'd2', 2.0);
INSERT INTO fdw_hyper_fk VALUES( '2021-05-05 00:00:00+00', 'd2', 2.0);

\c :TEST_DBNAME :ROLE_4
-- this is a stand-in for the OSM table
Expand All @@ -670,8 +670,20 @@ SELECT _timescaledb_functions.attach_osm_table_chunk('hyper_fk', 'child_hyper_fk

--create table with fk into hypertable
CREATE TABLE event(ts timestamptz REFERENCES hyper_fk(ts) , info text);
INSERT INTO event VALUES( '2021-05-05 00:00' , 'osm_chunk_ts');

\set ON_ERROR_STOP 0
-- NOTE: current behavior is to allow inserts/deletes from PG tables when data
-- references OSM table.
--insert referencing OSM chunk
INSERT INTO event VALUES( '2021-05-05 00:00:00+00' , 'osm_chunk_ts');
--insert referencing non-existent value
INSERT INTO event VALUES( '2020-01-02 00:00:00+00' , 'does_not_exist_ts');
INSERT INTO event VALUES( '2020-01-01 00:00:00+00' , 'chunk_ts');
SELECT * FROM event ORDER BY ts;

DELETE FROM event WHERE info = 'osm_chunk_ts';
DELETE FROM event WHERE info = 'chunk_ts';
SELECT * FROM event ORDER BY ts;
\set ON_ERROR_STOP 1
-- clean up databases created
\c :TEST_DBNAME :ROLE_SUPERUSER
DROP DATABASE postgres_fdw_db WITH (FORCE);

0 comments on commit 7cece1b

Please sign in to comment.