非互換
Fujitsu Enterprise Postgres 17 SP1では、パーティションテーブルに依存関係のあるアクセスメソッドを削除しようとした際にエラーとなるように変更します。
postgres=# CREATE ACCESS METHOD heap2 TYPE TABLE HANDLER heap_tableam_handler; CREATE ACCESS METHOD postgres=# CREATE TABLE am_partitioned(x INT, y INT) PARTITION BY hash (x) USING heap2; CREATE TABLE postgres=# SELECT pg_describe_object(classid, objid, objsubid) AS obj, postgres-# pg_describe_object(refclassid, refobjid, refobjsubid) as refobj postgres-# FROM pg_depend, pg_am postgres-# WHERE pg_depend.refclassid = 'pg_am'::regclass postgres-# AND pg_am.oid = pg_depend.refobjid postgres-# AND pg_depend.objid = 'am_partitioned'::regclass; obj | refobj -----+-------- (0 rows) postgres=# DROP ACCESS METHOD heap2; DROP ACCESS METHOD
postgres=# SELECT pg_describe_object(classid, objid, objsubid) AS obj,
postgres-# pg_describe_object(refclassid, refobjid, refobjsubid) as refobj
postgres-# FROM pg_depend, pg_am
postgres-# WHERE pg_depend.refclassid = 'pg_am'::regclass
postgres-# AND pg_am.oid = pg_depend.refobjid
postgres-# AND pg_depend.objid = 'am_partitioned'::regclass;
obj | refobj
----------------------+---------------------
table am_partitioned | access method heap2
(1 row)
postgres=# DROP ACCESS METHOD heap2;
ERROR: cannot drop access method heap2 because other objects depend on it
DETAIL: table am_partitioned depends on access method heap2
HINT: Use DROP ... CASCADE to drop the dependent objects too.対処方法
DROP ACCESS METHOD文にCASCADEを指定してください。
ただし、依存関係のあるオブジェクトも同時に削除されることに注意してください。