mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-16 18:43:18 +08:00
A hypertable's root table should never have any tuples, but it can acquire tuples by accident if the TimescaleDB extension is not preloaded or `timescaledb.restoring` is set to ON. To avoid the above issue, a hypertable's root table now has a (internal) trigger that generates an error when tuples are inserted. This preserves the integrity of the hypertable even when restoring or the extension is not preloaded. An internal trigger has the advantage of being mostly transparent to users (e.g., it doesn't show up with \d) and it is not inherited by chunks, so it needs no special handling to avoid adding it to chunks. The blocking trigger is added in the update script and if it is detected that the hypertable's root table has data in the process, the update will fail with an error and instructions on how to fix.
4 lines
208 B
SQL
4 lines
208 B
SQL
-- Trigger that blocks INSERTs on the hypertable's root table
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.insert_blocker() RETURNS trigger
|
|
AS '@MODULE_PATHNAME@', 'hypertable_insert_blocker' LANGUAGE C;
|