It doesn't actually work, even with allow_system_table_mods turned on:
the ALTER TABLE operation is rejected by ATSimplePermissions(), so even
the error message we're adding in this commit is unreachable.
Add a test case for it.
Author: Nikolay Shaplov <dhyan@nataraj.su>
Discussion: https://postgr.es/m/
1913854.tdWV9SEqCh@thinkpad-pgpro
switch (rel->rd_rel->relkind)
{
case RELKIND_RELATION:
- case RELKIND_TOASTVALUE:
case RELKIND_MATVIEW:
(void) heap_reloptions(rel->rd_rel->relkind, newOptions, true);
break;
case RELKIND_PARTITIONED_INDEX:
(void) index_reloptions(rel->rd_indam->amoptions, newOptions, true);
break;
+ case RELKIND_TOASTVALUE:
+ /* fall through to error -- shouldn't ever get here */
default:
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
SET allow_system_table_mods TO on;
DROP RULE r2 ON pg_description;
RESET allow_system_table_mods;
+-- Reloptions on TOAST tables
+ALTER TABLE pg_toast.pg_toast_2615 SET (fillfactor = '90');
+ERROR: permission denied: "pg_toast_2615" is a system catalog
SET allow_system_table_mods = on;
-- create new table in pg_catalog
BEGIN;
CREATE RULE r1 AS ON INSERT TO pg_description DO INSTEAD NOTHING;
ALTER RULE r1 ON pg_description RENAME TO r2;
DROP RULE r2 ON pg_description;
+-- Reloptions on TOAST tables
+ALTER TABLE pg_toast.pg_toast_2615 SET (fillfactor = '90');
+ERROR: ALTER action SET cannot be performed on relation "pg_toast_2615"
+DETAIL: This operation is not supported for TOAST tables.
-- cleanup
REVOKE ALL ON pg_description FROM regress_user_ast;
DROP USER regress_user_ast;
DROP RULE r2 ON pg_description;
RESET allow_system_table_mods;
+-- Reloptions on TOAST tables
+ALTER TABLE pg_toast.pg_toast_2615 SET (fillfactor = '90');
SET allow_system_table_mods = on;
ALTER RULE r1 ON pg_description RENAME TO r2;
DROP RULE r2 ON pg_description;
+-- Reloptions on TOAST tables
+ALTER TABLE pg_toast.pg_toast_2615 SET (fillfactor = '90');
-- cleanup
REVOKE ALL ON pg_description FROM regress_user_ast;