mirror of
https://github.com/postgres/postgres.git
synced 2025-05-31 03:21:24 +03:00
Remove direct handling of reloptions for toast tables
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
This commit is contained in:
parent
92fc6856cb
commit
1548c3a304
@ -15963,7 +15963,6 @@ ATExecSetRelOptions(Relation rel, List *defList, AlterTableType operation,
|
|||||||
switch (rel->rd_rel->relkind)
|
switch (rel->rd_rel->relkind)
|
||||||
{
|
{
|
||||||
case RELKIND_RELATION:
|
case RELKIND_RELATION:
|
||||||
case RELKIND_TOASTVALUE:
|
|
||||||
case RELKIND_MATVIEW:
|
case RELKIND_MATVIEW:
|
||||||
(void) heap_reloptions(rel->rd_rel->relkind, newOptions, true);
|
(void) heap_reloptions(rel->rd_rel->relkind, newOptions, true);
|
||||||
break;
|
break;
|
||||||
@ -15977,6 +15976,8 @@ ATExecSetRelOptions(Relation rel, List *defList, AlterTableType operation,
|
|||||||
case RELKIND_PARTITIONED_INDEX:
|
case RELKIND_PARTITIONED_INDEX:
|
||||||
(void) index_reloptions(rel->rd_indam->amoptions, newOptions, true);
|
(void) index_reloptions(rel->rd_indam->amoptions, newOptions, true);
|
||||||
break;
|
break;
|
||||||
|
case RELKIND_TOASTVALUE:
|
||||||
|
/* fall through to error -- shouldn't ever get here */
|
||||||
default:
|
default:
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||||
|
@ -91,6 +91,9 @@ ERROR: permission denied: "pg_description" is a system catalog
|
|||||||
SET allow_system_table_mods TO on;
|
SET allow_system_table_mods TO on;
|
||||||
DROP RULE r2 ON pg_description;
|
DROP RULE r2 ON pg_description;
|
||||||
RESET allow_system_table_mods;
|
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;
|
SET allow_system_table_mods = on;
|
||||||
-- create new table in pg_catalog
|
-- create new table in pg_catalog
|
||||||
BEGIN;
|
BEGIN;
|
||||||
@ -173,6 +176,10 @@ DROP TRIGGER t2 ON pg_description;
|
|||||||
CREATE RULE r1 AS ON INSERT TO pg_description DO INSTEAD NOTHING;
|
CREATE RULE r1 AS ON INSERT TO pg_description DO INSTEAD NOTHING;
|
||||||
ALTER RULE r1 ON pg_description RENAME TO r2;
|
ALTER RULE r1 ON pg_description RENAME TO r2;
|
||||||
DROP RULE r2 ON pg_description;
|
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
|
-- cleanup
|
||||||
REVOKE ALL ON pg_description FROM regress_user_ast;
|
REVOKE ALL ON pg_description FROM regress_user_ast;
|
||||||
DROP USER regress_user_ast;
|
DROP USER regress_user_ast;
|
||||||
|
@ -89,6 +89,8 @@ SET allow_system_table_mods TO on;
|
|||||||
DROP RULE r2 ON pg_description;
|
DROP RULE r2 ON pg_description;
|
||||||
RESET allow_system_table_mods;
|
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;
|
SET allow_system_table_mods = on;
|
||||||
|
|
||||||
@ -187,6 +189,8 @@ CREATE RULE r1 AS ON INSERT TO pg_description DO INSTEAD NOTHING;
|
|||||||
ALTER RULE r1 ON pg_description RENAME TO r2;
|
ALTER RULE r1 ON pg_description RENAME TO r2;
|
||||||
DROP RULE r2 ON pg_description;
|
DROP RULE r2 ON pg_description;
|
||||||
|
|
||||||
|
-- Reloptions on TOAST tables
|
||||||
|
ALTER TABLE pg_toast.pg_toast_2615 SET (fillfactor = '90');
|
||||||
|
|
||||||
-- cleanup
|
-- cleanup
|
||||||
REVOKE ALL ON pg_description FROM regress_user_ast;
|
REVOKE ALL ON pg_description FROM regress_user_ast;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user