-
Notifications
You must be signed in to change notification settings - Fork 891
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add functions to enable/disable policies #6116
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
Implements: #6116 Add functions to enable/disable hypertable policies | ||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -128,4 +128,93 @@ CREATE OR REPLACE FUNCTION timescaledb_experimental.show_policies( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
relation REGCLASS) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RETURNS SETOF JSONB | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AS '@MODULE_PATHNAME@', 'ts_policies_show' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGUAGE C VOLATILE; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGUAGE C VOLATILE; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CREATE OR REPLACE FUNCTION _timescaledb_functions.set_policy_scheduled(hypertable REGCLASS, policy_type TEXT, scheduled BOOL) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RETURNS INTEGER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AS $$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WITH affected_policies AS ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT @[email protected]_job(j.id, scheduled => set_policy_scheduled.scheduled) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FROM _timescaledb_config.bgw_job j | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
JOIN _timescaledb_catalog.hypertable h ON h.id = j.hypertable_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WHERE j.proc_schema IN ('_timescaledb_internal', '_timescaledb_functions') | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AND j.proc_name = set_policy_scheduled.policy_type | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AND j.id >= 1000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AND scheduled <> set_policy_scheduled.scheduled | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AND format('%I.%I', h.schema_name, h.table_name) = set_policy_scheduled.hypertable::text | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT count(*) FROM affected_policies; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+133
to
+148
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nit: instead of
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nit: Consistency with the other names?
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This would not work with data tiering policies. We should treat that as a timescale policy too. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @gayyappan Not sure I follow. Why would a different name of the above function not work with data tiering policies? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We probably also need to check user's permissions before the user is allowed to enable/disable policies. A Should a user without adequate permissions on the hypertable be allowed to disable a policy? IIRC, we check the role's permissions before adding a policy. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @mkindahl The proc_schema in the sql is limited to timescaledb_internal/timescaledb_functions. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @gayyappan Ah, so you were referring to the actual code for implementing the function, not the function name. It was a comment on my comment, so it wasn't entirely clear. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Correct. Should it? Data tiering policies reside in a separate extension. Should helper functions in the TimescaleDB extension wrap functions in the OSM extension?
The function takes a hypertable as its argument, so it only disables policies which are attached to a hypertable. Maybe the name should change to
All of these functions delegate to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. While this is true from a code perspective, from a user perspective, this is 1 database running timescale defined policies - so it should just work out of the box. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
That could very well be true. You could modify the test to show that a user/role without permissions on the hypertable cannot alter policies. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @JamesGuthrie I'll add a follow up to get this to work with OSM extension as well. For this PR, we should verify that permissions are checked by the new apis and add a test case to confirm that. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CREATE OR REPLACE FUNCTION _timescaledb_functions.set_all_policy_scheduled(hypertable REGCLASS, scheduled BOOL) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RETURNS INTEGER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AS $$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WITH affected_policies AS ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT @[email protected]_job(j.id, scheduled => set_all_policy_scheduled.scheduled) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FROM _timescaledb_config.bgw_job j | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
JOIN _timescaledb_catalog.hypertable h ON h.id = j.hypertable_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WHERE j.proc_schema IN ('_timescaledb_internal', '_timescaledb_functions') | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AND j.id >= 1000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AND scheduled <> set_all_policy_scheduled.scheduled | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AND format('%I.%I', h.schema_name, h.table_name) = set_all_policy_scheduled.hypertable::text | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT count(*) FROM affected_policies; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CREATE OR REPLACE FUNCTION @[email protected]_all_policies(hypertable REGCLASS) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RETURNS INTEGER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AS $$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT _timescaledb_functions.set_all_policy_scheduled(hypertable, false); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CREATE OR REPLACE FUNCTION @[email protected]_all_policies(hypertable REGCLASS) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RETURNS INTEGER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AS $$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT _timescaledb_functions.set_all_policy_scheduled(hypertable, true); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CREATE OR REPLACE FUNCTION @[email protected]_compression_policy(hypertable REGCLASS) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RETURNS INTEGER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AS $$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT _timescaledb_functions.set_policy_scheduled(hypertable, 'policy_compression', false); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CREATE OR REPLACE FUNCTION @[email protected]_compression_policy(hypertable REGCLASS) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RETURNS INTEGER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AS $$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT _timescaledb_functions.set_policy_scheduled(hypertable, 'policy_compression', true); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CREATE OR REPLACE FUNCTION @[email protected]_reorder_policy(hypertable REGCLASS) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RETURNS INTEGER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AS $$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT _timescaledb_functions.set_policy_scheduled(hypertable, 'policy_reorder', false); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CREATE OR REPLACE FUNCTION @[email protected]_reorder_policy(hypertable REGCLASS) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RETURNS INTEGER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AS $$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT _timescaledb_functions.set_policy_scheduled(hypertable, 'policy_reorder', true); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CREATE OR REPLACE FUNCTION @[email protected]_retention_policy(hypertable REGCLASS) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RETURNS INTEGER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AS $$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT _timescaledb_functions.set_policy_scheduled(hypertable, 'policy_retention', false); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CREATE OR REPLACE FUNCTION @[email protected]_retention_policy(hypertable REGCLASS) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RETURNS INTEGER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AS $$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SELECT _timescaledb_functions.set_policy_scheduled(hypertable, 'policy_retention', true); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -179,3 +179,93 @@ DROP TABLE _timescaledb_internal.tmp_chunk_seq_value; | |
GRANT SELECT ON _timescaledb_catalog.chunk_id_seq TO PUBLIC; | ||
GRANT SELECT ON _timescaledb_catalog.chunk TO PUBLIC; | ||
-- end recreate _timescaledb_catalog.chunk table -- | ||
|
||
CREATE FUNCTION _timescaledb_functions.set_policy_scheduled(hypertable REGCLASS, policy_type TEXT, scheduled BOOL) | ||
RETURNS INTEGER | ||
AS $$ | ||
WITH affected_policies AS ( | ||
SELECT @[email protected]_job(j.id, scheduled => set_policy_scheduled.scheduled) | ||
FROM _timescaledb_config.bgw_job j | ||
JOIN _timescaledb_catalog.hypertable h ON h.id = j.hypertable_id | ||
WHERE j.proc_schema IN ('_timescaledb_internal', '_timescaledb_functions') | ||
AND j.proc_name = set_policy_scheduled.policy_type | ||
AND j.id >= 1000 | ||
AND scheduled <> set_policy_scheduled.scheduled | ||
AND format('%I.%I', h.schema_name, h.table_name) = set_policy_scheduled.hypertable::text | ||
) | ||
SELECT count(*) FROM affected_policies; | ||
$$ | ||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||
|
||
CREATE FUNCTION _timescaledb_functions.set_all_policy_scheduled(hypertable REGCLASS, scheduled BOOL) | ||
RETURNS INTEGER | ||
AS $$ | ||
WITH affected_policies AS ( | ||
SELECT @[email protected]_job(j.id, scheduled => set_all_policy_scheduled.scheduled) | ||
FROM _timescaledb_config.bgw_job j | ||
JOIN _timescaledb_catalog.hypertable h ON h.id = j.hypertable_id | ||
WHERE j.proc_schema IN ('_timescaledb_internal', '_timescaledb_functions') | ||
AND j.id >= 1000 | ||
AND scheduled <> set_all_policy_scheduled.scheduled | ||
AND format('%I.%I', h.schema_name, h.table_name) = set_all_policy_scheduled.hypertable::text | ||
) | ||
SELECT count(*) FROM affected_policies; | ||
$$ | ||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||
|
||
CREATE FUNCTION @[email protected]_all_policies(hypertable REGCLASS) | ||
RETURNS INTEGER | ||
AS $$ | ||
SELECT _timescaledb_functions.set_all_policy_scheduled(hypertable, false); | ||
$$ | ||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||
|
||
CREATE FUNCTION @[email protected]_all_policies(hypertable REGCLASS) | ||
RETURNS INTEGER | ||
AS $$ | ||
SELECT _timescaledb_functions.set_all_policy_scheduled(hypertable, true); | ||
$$ | ||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||
|
||
CREATE FUNCTION @[email protected]_compression_policy(hypertable REGCLASS) | ||
RETURNS INTEGER | ||
AS $$ | ||
SELECT _timescaledb_functions.set_policy_scheduled(hypertable, 'policy_compression', false); | ||
$$ | ||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||
|
||
CREATE FUNCTION @[email protected]_compression_policy(hypertable REGCLASS) | ||
RETURNS INTEGER | ||
AS $$ | ||
SELECT _timescaledb_functions.set_policy_scheduled(hypertable, 'policy_compression', true); | ||
$$ | ||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||
|
||
CREATE FUNCTION @[email protected]_reorder_policy(hypertable REGCLASS) | ||
RETURNS INTEGER | ||
AS $$ | ||
SELECT _timescaledb_functions.set_policy_scheduled(hypertable, 'policy_reorder', false); | ||
$$ | ||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||
|
||
CREATE FUNCTION @[email protected]_reorder_policy(hypertable REGCLASS) | ||
RETURNS INTEGER | ||
AS $$ | ||
SELECT _timescaledb_functions.set_policy_scheduled(hypertable, 'policy_reorder', true); | ||
$$ | ||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||
|
||
CREATE FUNCTION @[email protected]_retention_policy(hypertable REGCLASS) | ||
RETURNS INTEGER | ||
AS $$ | ||
SELECT _timescaledb_functions.set_policy_scheduled(hypertable, 'policy_retention', false); | ||
$$ | ||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||
|
||
CREATE FUNCTION @[email protected]_retention_policy(hypertable REGCLASS) | ||
RETURNS INTEGER | ||
AS $$ | ||
SELECT _timescaledb_functions.set_policy_scheduled(hypertable, 'policy_retention', true); | ||
$$ | ||
LANGUAGE SQL SET search_path TO pg_catalog, pg_temp; | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -124,3 +124,14 @@ GRANT SELECT ON _timescaledb_catalog.chunk_id_seq TO PUBLIC; | |
GRANT SELECT ON _timescaledb_catalog.chunk TO PUBLIC; | ||
|
||
-- end recreate _timescaledb_catalog.chunk table -- | ||
|
||
DROP FUNCTION _timescaledb_functions.set_policy_scheduled(hypertable REGCLASS, policy_type TEXT, scheduled BOOL); | ||
DROP FUNCTION _timescaledb_functions.set_all_policy_scheduled(hypertable REGCLASS, scheduled BOOL); | ||
DROP FUNCTION @[email protected]_all_policies(hypertable REGCLASS); | ||
DROP FUNCTION @[email protected]_all_policies(hypertable REGCLASS); | ||
DROP FUNCTION @[email protected]_compression_policy(hypertable REGCLASS); | ||
DROP FUNCTION @[email protected]_compression_policy(hypertable REGCLASS); | ||
DROP FUNCTION @[email protected]_reorder_policy(hypertable REGCLASS); | ||
DROP FUNCTION @[email protected]_reorder_policy(hypertable REGCLASS); | ||
DROP FUNCTION @[email protected]_retention_policy(hypertable REGCLASS); | ||
DROP FUNCTION @[email protected]_retention_policy(hypertable REGCLASS); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing similar functions for continuous aggregate policy.