Add support for SET ACCESS METHOD in altering a distributed table (#6525)

Co-authored-by: TsinghuaLucky912 <postgres@localhost.localdomain>
pull/6526/head
songjinzhou 2022-12-02 00:45:32 +08:00 committed by GitHub
parent c2193608c9
commit 29f0196fdf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 49 additions and 0 deletions

View File

@ -2992,6 +2992,9 @@ ErrorIfUnsupportedAlterTableStmt(AlterTableStmt *alterTableStatement)
break;
}
#if PG_VERSION_NUM >= PG_VERSION_15
case AT_SetAccessMethod:
#endif
case AT_SetNotNull:
case AT_ReplicaIdentity:
case AT_ChangeOwner:
@ -3007,6 +3010,7 @@ ErrorIfUnsupportedAlterTableStmt(AlterTableStmt *alterTableStatement)
{
/*
* We will not perform any special check for:
* ALTER TABLE .. SET ACCESS METHOD ..
* ALTER TABLE .. ALTER COLUMN .. SET NOT NULL
* ALTER TABLE .. REPLICA IDENTITY ..
* ALTER TABLE .. VALIDATE CONSTRAINT ..

View File

@ -1456,6 +1456,36 @@ NOTICE: drop cascades to 2 other objects
CREATE DATABASE db_with_oid OID 987654;
NOTICE: Citus partially supports CREATE DATABASE for distributed databases
DROP DATABASE db_with_oid;
-- SET ACCESS METHOD
-- Create a heap2 table am handler with heapam handler
CREATE ACCESS METHOD heap2 TYPE TABLE HANDLER heap_tableam_handler;
SELECT run_command_on_workers($$CREATE ACCESS METHOD heap2 TYPE TABLE HANDLER heap_tableam_handler$$);
run_command_on_workers
---------------------------------------------------------------------
(localhost,57637,t,"CREATE ACCESS METHOD")
(localhost,57638,t,"CREATE ACCESS METHOD")
(2 rows)
CREATE TABLE mx_ddl_table2 (
key int primary key,
value int
);
SELECT create_distributed_table('mx_ddl_table2', 'key', 'hash', shard_count=> 4);
create_distributed_table
---------------------------------------------------------------------
(1 row)
ALTER TABLE mx_ddl_table2 SET ACCESS METHOD heap2;
DROP TABLE mx_ddl_table2;
DROP ACCESS METHOD heap2;
SELECT run_command_on_workers($$DROP ACCESS METHOD heap2$$);
run_command_on_workers
---------------------------------------------------------------------
(localhost,57637,t,"DROP ACCESS METHOD")
(localhost,57638,t,"DROP ACCESS METHOD")
(2 rows)
-- Clean up
\set VERBOSITY terse
SET client_min_messages TO ERROR;

View File

@ -924,6 +924,21 @@ DROP SERVER foreign_server CASCADE;
CREATE DATABASE db_with_oid OID 987654;
DROP DATABASE db_with_oid;
-- SET ACCESS METHOD
-- Create a heap2 table am handler with heapam handler
CREATE ACCESS METHOD heap2 TYPE TABLE HANDLER heap_tableam_handler;
SELECT run_command_on_workers($$CREATE ACCESS METHOD heap2 TYPE TABLE HANDLER heap_tableam_handler$$);
CREATE TABLE mx_ddl_table2 (
key int primary key,
value int
);
SELECT create_distributed_table('mx_ddl_table2', 'key', 'hash', shard_count=> 4);
ALTER TABLE mx_ddl_table2 SET ACCESS METHOD heap2;
DROP TABLE mx_ddl_table2;
DROP ACCESS METHOD heap2;
SELECT run_command_on_workers($$DROP ACCESS METHOD heap2$$);
-- Clean up
\set VERBOSITY terse
SET client_min_messages TO ERROR;