PG-1380 Make pg_tde_is_encrypted() take a regclass

By changing the parameter to regclass you can pass any parameter of
the following types to it: text, oid, regclass; and there will be
an automatic cast. More user freindly than accepting text.
This commit is contained in:
Andreas Karlsson 2025-02-20 16:36:54 +01:00 committed by Andreas Karlsson
parent bbf830267a
commit 54d4598619
6 changed files with 8 additions and 22 deletions

View File

@ -83,7 +83,7 @@ WHERE tde_table.id IS NULL;
-- 10. Verify tables are encrypted
-- ===============================================
-- Verify all tables exist and are encrypted
SELECT tablename, pg_tde_is_encrypted(tablename::TEXT) AS is_encrypted
SELECT tablename, pg_tde_is_encrypted(tablename::regclass) AS is_encrypted
FROM pg_tables
WHERE schemaname = 'public'
AND tablename IN ('tde_table', 'tde_child', 'part1','part_table')

View File

@ -128,7 +128,7 @@ WHERE dept.deptno IS NULL;
-- 9. Verify tables are encrypted
-- ===============================================
-- Verify all tables exist and are encrypted
SELECT tablename, pg_tde_is_encrypted(tablename::TEXT) AS is_encrypted
SELECT tablename, pg_tde_is_encrypted(tablename::regclass) AS is_encrypted
FROM pg_tables
WHERE schemaname = 'public'
AND tablename IN ('dept', 'emp', 'jobhist')

View File

@ -50,12 +50,6 @@ SELECT pg_tde_is_encrypted('test_norm');
f
(1 row)
SELECT pg_tde_is_encrypted('public.test_enc');
pg_tde_is_encrypted
---------------------
t
(1 row)
SELECT key_provider_id, key_provider_name, principal_key_name
FROM pg_tde_principal_key_info();
key_provider_id | key_provider_name | principal_key_name

View File

@ -52,12 +52,6 @@ SELECT pg_tde_is_encrypted('test_norm');
f
(1 row)
SELECT pg_tde_is_encrypted('public.test_enc');
pg_tde_is_encrypted
---------------------
t
(1 row)
SELECT key_provider_id, key_provider_name, principal_key_name
FROM pg_tde_principal_key_info();
key_provider_id | key_provider_name | principal_key_name

View File

@ -424,22 +424,22 @@ RETURNS table_am_handler
LANGUAGE C
AS 'MODULE_PATHNAME';
CREATE FUNCTION pg_tde_internal_has_key(oid OID)
CREATE FUNCTION pg_tde_internal_has_key(relation regclass)
RETURNS boolean
LANGUAGE C
AS 'MODULE_PATHNAME';
CREATE FUNCTION pg_tde_is_encrypted(table_name TEXT)
CREATE FUNCTION pg_tde_is_encrypted(table_name regclass)
RETURNS boolean
LANGUAGE SQL
BEGIN ATOMIC
SELECT EXISTS (
SELECT 1
FROM pg_catalog.pg_class
WHERE oid = table_name::regclass::oid
WHERE oid = table_name
AND (relam = (SELECT oid FROM pg_catalog.pg_am WHERE amname = 'tde_heap_basic')
OR (relam = (SELECT oid FROM pg_catalog.pg_am WHERE amname = 'tde_heap'))
AND pg_tde_internal_has_key(table_name::regclass::oid))
AND pg_tde_internal_has_key(table_name))
);
END;
@ -621,7 +621,7 @@ AS $$
BEGIN
EXECUTE format('GRANT EXECUTE ON FUNCTION pg_tde_list_all_key_providers() TO %I', target_role);
EXECUTE format('GRANT EXECUTE ON FUNCTION pg_tde_list_all_global_key_providers() TO %I', target_role);
EXECUTE format('GRANT EXECUTE ON FUNCTION pg_tde_is_encrypted(text) TO %I', target_role);
EXECUTE format('GRANT EXECUTE ON FUNCTION pg_tde_is_encrypted(regclass) TO %I', target_role);
EXECUTE format('GRANT EXECUTE ON FUNCTION pg_tde_principal_key_info() TO %I', target_role);
EXECUTE format('GRANT EXECUTE ON FUNCTION pg_tde_global_principal_key_info() TO %I', target_role);
@ -702,7 +702,7 @@ AS $$
BEGIN
EXECUTE format('REVOKE EXECUTE ON FUNCTION pg_tde_list_all_key_providers() FROM %I', target_role);
EXECUTE format('REVOKE EXECUTE ON FUNCTION pg_tde_list_all_global_key_providers() FROM %I', target_role);
EXECUTE format('REVOKE EXECUTE ON FUNCTION pg_tde_is_encrypted(text) FROM %I', target_role);
EXECUTE format('REVOKE EXECUTE ON FUNCTION pg_tde_is_encrypted(regclass) FROM %I', target_role);
EXECUTE format('REVOKE EXECUTE ON FUNCTION pg_tde_principal_key_info() FROM %I', target_role);
EXECUTE format('REVOKE EXECUTE ON FUNCTION pg_tde_global_principal_key_info() FROM %I', target_role);

View File

@ -23,8 +23,6 @@ SELECT amname FROM pg_class INNER JOIN pg_am ON pg_am.oid = pg_class.relam WHERE
SELECT pg_tde_is_encrypted('test_enc');
SELECT pg_tde_is_encrypted('test_norm');
SELECT pg_tde_is_encrypted('public.test_enc');
SELECT key_provider_id, key_provider_name, principal_key_name
FROM pg_tde_principal_key_info();