DDL Command handling matrix#
次の表では、許可されるユーティリティまたはDDLコマンド、レプリケートされるもの、およびレプリケート時に使用されるグローバルロックの種類について説明します。
ALTER TABLE
のようなより複雑なステートメントの場合、これらは実行されるサブコマンドによって異なる場合があります。このようなすべてのコマンドには、次の表の下に詳細な説明があります。
コマンドマトリックス#
Command |
Allowed |
Replicated |
Lock |
|---|---|---|---|
ALTER AGGREGATE |
Y |
Y |
DDL |
ALTER CAST |
Y |
Y |
DDL |
ALTER COLLATION |
Y |
Y |
DDL |
ALTER CONVERSION |
Y |
Y |
DDL |
ALTER DATABASE |
Y |
N |
N |
ALTER DATABASE LINK |
Y |
Y |
DDL |
ALTER DEFAULT PRIVILEGES |
Y |
Y |
DDL |
ALTER DIRECTORY |
Y |
Y |
DDL |
ALTER DOMAIN |
Y |
Y |
DDL |
ALTER EVENT TRIGGER |
Y |
Y |
DDL |
ALTER EXTENSION |
Y |
Y |
DDL |
ALTER FOREIGN DATA WRAPPER |
Y |
Y |
DDL |
ALTER FOREIGN TABLE |
Y |
Y |
DDL |
ALTER FUNCTION |
Y |
Y |
DDL |
ALTER INDEX |
Y |
Y |
DDL |
ALTER LANGUAGE |
Y |
Y |
DDL |
ALTER LARGE OBJECT |
N |
N |
N |
ALTER MATERIALIZED VIEW |
Y |
N |
N |
ALTER OPERATOR |
Y |
Y |
DDL |
ALTER OPERATOR CLASS |
Y |
Y |
DDL |
ALTER OPERATOR FAMILY |
Y |
Y |
DDL |
ALTER PACKAGE |
Y |
Y |
DDL |
ALTER POLICY |
Y |
Y |
DDL |
ALTER PROCEDURE |
Y |
Y |
DDL |
ALTER PROFILE |
Y |
Y |
|
ALTER PUBLICATION |
Y |
Y |
DDL |
ALTER QUEUE |
Y |
Y |
DDL |
ALTER QUEUE TABLE |
Y |
Y |
DDL |
ALTER REDACTION POLICY |
Y |
Y |
DDL |
ALTER RESOURCE GROUP |
Y |
N |
N |
ALTER ROLE |
Y |
Y |
DDL |
ALTER ROUTINE |
Y |
Y |
DDL |
ALTER RULE |
Y |
Y |
DDL |
ALTER SCHEMA |
Y |
Y |
DDL |
ALTER SEQUENCE |
Y |
DML |
|
ALTER SERVER |
Y |
Y |
DDL |
ALTER SESSION |
Y |
N |
N |
ALTER STATISTICS |
Y |
Y |
DDL |
ALTER SUBSCRIPTION |
Y |
Y |
DDL |
ALTER SYNONYM |
Y |
Y |
DDL |
ALTER SYSTEM |
Y |
N |
N |
ALTER TABLE |
Y |
||
ALTER TABLESPACE |
Y |
N |
N |
ALTER TEXT SEARCH CONFIGURATION |
Y |
Y |
DDL |
ALTER TEXT SEARCH DICTIONARY |
Y |
Y |
DDL |
ALTER TEXT SEARCH PARSER |
Y |
Y |
DDL |
ALTER TEXT SEARCH TEMPLATE |
Y |
Y |
DDL |
ALTER TRIGGER |
Y |
Y |
DDL |
ALTER TYPE |
Y |
Y |
DDL |
ALTER USER MAPPING |
Y |
Y |
DDL |
ALTER VIEW |
Y |
Y |
DDL |
ANALYZE |
Y |
N |
N |
BEGIN |
Y |
N |
N |
CHECKPOINT |
Y |
N |
N |
CLOSE |
Y |
N |
N |
CLOSE CURSOR |
Y |
N |
N |
CLOSE CURSOR ALL |
Y |
N |
N |
CLUSTER |
Y |
N |
N |
COMMENT |
Y |
DDL |
|
COMMIT |
Y |
N |
N |
COMMIT PREPARED |
Y |
N |
N |
COPY |
Y |
N |
N |
COPY FROM |
Y |
N |
N |
CREATE ACCESS METHOD |
Y |
Y |
DDL |
CREATE AGGREGATE |
Y |
Y |
DDL |
CREATE CAST |
Y |
Y |
DDL |
CREATE COLLATION |
Y |
Y |
DDL |
CREATE CONSTRAINT |
Y |
Y |
DDL |
CREATE CONVERSION |
Y |
Y |
DDL |
CREATE DATABASE |
Y |
N |
N |
CREATE DATABASE LINK |
Y |
Y |
DDL |
CREATE DIRECTORY |
Y |
Y |
DDL |
CREATE DOMAIN |
Y |
Y |
DDL |
CREATE EVENT TRIGGER |
Y |
Y |
DDL |
CREATE EXTENSION |
Y |
Y |
DDL |
CREATE FOREIGN DATA WRAPPER |
Y |
Y |
DDL |
CREATE FOREIGN TABLE |
Y |
Y |
DDL |
CREATE FUNCTION |
Y |
Y |
DDL |
CREATE INDEX |
Y |
Y |
DML |
CREATE LANGUAGE |
Y |
Y |
DDL |
CREATE MATERIALIZED VIEW |
Y |
N |
N |
CREATE OPERATOR |
Y |
Y |
DDL |
CREATE OPERATOR CLASS |
Y |
Y |
DDL |
CREATE OPERATOR FAMILY |
Y |
Y |
DDL |
CREATE PACKAGE |
Y |
Y |
DDL |
CREATE PACKAGE BODY |
Y |
Y |
DDL |
CREATE POLICY |
Y |
Y |
DML |
CREATE PROCEDURE |
Y |
Y |
DDL |
CREATE PROFILE |
Y |
Y |
|
CREATE PUBLICATION |
Y |
Y |
DDL |
CREATE QUEUE |
Y |
Y |
DDL |
CREATE QUEUE TABLE |
Y |
Y |
DDL |
CREATE REDACTION POLICY |
Y |
Y |
DDL |
CREATE RESOURCE GROUP |
Y |
N |
N |
CREATE ROLE |
Y |
Y |
DDL |
CREATE ROUTINE |
Y |
Y |
DDL |
CREATE RULE |
Y |
Y |
DDL |
CREATE SCHEMA |
Y |
Y |
DDL |
CREATE SEQUENCE |
Y |
DDL |
|
CREATE SERVER |
Y |
Y |
DDL |
CREATE STATISTICS |
Y |
Y |
DDL |
CREATE SUBSCRIPTION |
Y |
Y |
DDL |
CREATE SYNONYM |
Y |
Y |
DDL |
CREATE TABLE |
Y |
DDL |
|
CREATE TABLE AS |
Y |
DDL |
|
CREATE TABLESPACE |
Y |
N |
N |
CREATE TEXT SEARCH CONFIGURATION |
Y |
Y |
DDL |
CREATE TEXT SEARCH DICTIONARY |
Y |
Y |
DDL |
CREATE TEXT SEARCH PARSER |
Y |
Y |
DDL |
CREATE TEXT SEARCH TEMPLATE |
Y |
Y |
DDL |
CREATE TRANSFORM |
Y |
Y |
DDL |
CREATE TRIGGER |
Y |
Y |
DDL |
CREATE TYPE |
Y |
Y |
DDL |
CREATE TYPE BODY |
Y |
Y |
DDL |
CREATE USER MAPPING |
Y |
Y |
DDL |
CREATE VIEW |
Y |
Y |
DDL |
DEALLOCATE |
Y |
N |
N |
DEALLOCATE ALL |
Y |
N |
N |
DECLARE CURSOR |
Y |
N |
N |
DISCARD |
Y |
N |
N |
DISCARD ALL |
Y |
N |
N |
DISCARD PLANS |
Y |
N |
N |
DISCARD SEQUENCES |
Y |
N |
N |
DISCARD TEMP |
Y |
N |
N |
DO |
Y |
N |
N |
DROP ACCESS METHOD |
Y |
Y |
DDL |
DROP AGGREGATE |
Y |
Y |
DDL |
DROP CAST |
Y |
Y |
DDL |
DROP COLLATION |
Y |
Y |
DDL |
DROP CONSTRAINT |
Y |
Y |
DDL |
DROP CONVERSION |
Y |
Y |
DDL |
DROP DATABASE |
Y |
N |
N |
DROP DATABASE LINK |
Y |
Y |
DDL |
DROP DIRECTORY |
Y |
Y |
DDL |
DROP DOMAIN |
Y |
Y |
DDL |
DROP EVENT TRIGGER |
Y |
Y |
DDL |
DROP EXTENSION |
Y |
Y |
DDL |
DROP FOREIGN DATA WRAPPER |
Y |
Y |
DDL |
DROP FOREIGN TABLE |
Y |
Y |
DDL |
DROP FUNCTION |
Y |
Y |
DDL |
DROP INDEX |
Y |
Y |
DDL |
DROP LANGUAGE |
Y |
Y |
DDL |
DROP MATERIALIZED VIEW |
Y |
N |
N |
DROP OPERATOR |
Y |
Y |
DDL |
DROP OPERATOR CLASS |
Y |
Y |
DDL |
DROP OPERATOR FAMILY |
Y |
Y |
DDL |
DROP OWNED |
Y |
Y |
DDL |
DROP PACKAGE |
Y |
Y |
DDL |
DROP PACKAGE BODY |
Y |
Y |
DDL |
DROP POLICY |
Y |
Y |
DDL |
DROP PROCEDURE |
Y |
Y |
DDL |
DROP PROFILE |
Y |
Y |
DDL |
DROP PUBLICATION |
Y |
Y |
DDL |
DROP QUEUE |
Y |
Y |
DDL |
DROP QUEUE TABLE |
Y |
Y |
DDL |
DROP REDACTION POLICY |
Y |
Y |
DDL |
DROP RESOURCE GROUP |
Y |
N |
N |
DROP ROLE |
Y |
Y |
DDL |
DROP ROUTINE |
Y |
Y |
DDL |
DROP RULE |
Y |
Y |
DDL |
DROP SCHEMA |
Y |
Y |
DDL |
DROP SEQUENCE |
Y |
Y |
DDL |
DROP SERVER |
Y |
Y |
DDL |
DROP STATISTICS |
Y |
Y |
DDL |
DROP SUBSCRIPTION |
Y |
Y |
DDL |
DROP SYNONYM |
Y |
Y |
DDL |
DROP TABLE |
Y |
Y |
DML |
DROP TABLESPACE |
Y |
N |
N |
DROP TEXT SEARCH CONFIGURATION |
Y |
Y |
DDL |
DROP TEXT SEARCH DICTIONARY |
Y |
Y |
DDL |
DROP TEXT SEARCH PARSER |
Y |
Y |
DDL |
DROP TEXT SEARCH TEMPLATE |
Y |
Y |
DDL |
DROP TRANSFORM |
Y |
Y |
DDL |
DROP TRIGGER |
Y |
Y |
DDL |
DROP TYPE |
Y |
Y |
DDL |
DROP TYPE BODY |
Y |
Y |
DDL |
DROP USER MAPPING |
Y |
Y |
DDL |
DROP VIEW |
Y |
Y |
DDL |
EXECUTE |
Y |
N |
N |
EXPLAIN |
Y |
||
FETCH |
Y |
N |
N |
GRANT |
Y |
DDL |
|
GRANT ROLE |
Y |
Y |
DDL |
IMPORT FOREIGN SCHEMA |
Y |
Y |
DDL |
LISTEN |
Y |
N |
N |
LOAD |
Y |
N |
N |
LOAD ROW DATA |
Y |
Y |
DDL |
LOCK TABLE |
Y |
N |
|
MOVE |
Y |
N |
N |
NOTIFY |
Y |
N |
N |
PREPARE |
Y |
N |
N |
PREPARE TRANSACTION |
Y |
N |
N |
REASSIGN OWNED |
Y |
Y |
DDL |
REFRESH MATERIALIZED VIEW |
Y |
N |
N |
REINDEX |
Y |
N |
N |
RELEASE |
Y |
N |
N |
RESET |
Y |
N |
N |
REVOKE |
Y |
DDL |
|
REVOKE ROLE |
Y |
Y |
DDL |
ROLLBACK |
Y |
N |
N |
ROLLBACK PREPARED |
Y |
N |
N |
SAVEPOINT |
Y |
N |
N |
SECURITY LABEL |
Y |
DDL |
|
SELECT INTO |
Y |
DDL |
|
SET |
Y |
N |
N |
SET CONSTRAINTS |
Y |
N |
N |
SHOW |
Y |
N |
N |
START TRANSACTION |
Y |
N |
N |
TRUNCATE TABLE |
Y |
||
UNLISTEN |
Y |
N |
N |
VACUUM |
Y |
N |
N |
コマンドの注意事項#
ALTER SEQUENCE#
一般にALTER SEQUENCE
がサポートされていますが、グローバルシーケンスを使用する場合、一部のオプションは効果がありません。
ALTER SEQUENCE ... RENAME
は、gallocシーケンスのみでサポートされていません。
ALTER SEQUENCE ... SET SCHEMA
は、gallocシーケンスのみでサポートされていません。
ALTER TABLE#
通常、 ALTER TABLE
コマンドは許可されます。ただし、いくつかのサブコマンドはサポートされていません。
ALTER TABLEは許可されないコマンド#
ALTER TABLE の一部のバリアントは、現在PGDノードで使用できません。
ADD COLUMN ... DEFAULT (non-immutable expression)—これは、現在別のノードで別のデータになるため、許可されていません。推奨される回避策については、 列の追加 を参照してください。ADD CONSTRAINT ... EXCLUDE—除外コンストレインはサポートされていません。除外制約は、テーブル内の2つの行がオーバーラップする範囲を持たないようにする方法です。これは、すべてのノードに同時にコンストレインを適用できる同期システムで役立ちます。ただし、非同期システムでは、コンストレインがすべてのノードに同時に適用されることを保証できません。これにより、データの一貫性がなくなり、再生できない変更が発生する可能性があります。したがって、除外コンストレインはサポートされていません。ALTER TABLE ... SET WITH[OUT] OIDS—CREATE TABLEと同じ理由でサポートされていません。ALTER COLUMN ... SET STORAGE external—列がテーブルのレプリカIDの列の1つである場合、拒否されます。RENAME—自動パーティション化されたテーブルの名前は変更できません。SET SCHEMA—自動パーティション化されたテーブルのスキーマは設定できません。ALTER COLUMN ... TYPE—コマンドによってテーブル全体が書き換えられる場合、列のタイプの変更はサポートされません。これは、変更がバイナリ強制可能でない場合に発生します。バイナリの強制変更は、一方通行のみが許可される場合があります。たとえば、VARCHAR(128)からVARCHAR(256)への変更はバイナリ強制可能であるため許可されますが、VARCHAR(256)からVARCHAR(128)への変更はバイナリ強制可能ではないため、通常は許可されません。非レプリケートのALTER COLUMN ... TYPEは、列が新しいタイプに自動的にキャスト可能である場合に許可されますUSING句が含まれません。次に例を示します。テーブルリライトは、大規模なテーブルでAccessExclusiveLockを長期間保持するため、このようなコマンドは、いずれの場合も高可用データベースでは実行不可能である可能性があります。推奨される回避策については、 カラムのタイプの変更 を参照してください。ALTER TABLE ... ADD FOREIGN KEY—現在のユーザーが参照されるテーブルを読み取る権限がない場合、または参照されるテーブルで現在のユーザーがバイパスできないRLS制限が有効になっている場合、サポートされません。
次の例は、 timestamp 型の定数値をtimestamptz
型の列に追加しようとするため、失敗します。 timestamp
とtimestamptz
間のキャストは、セッションのタイムゾーンに依存するため、不変ではありません。
ALTER TABLE foo
ADD expiry_date timestamptz DEFAULT timestamp 2100-01-01 00:00:00 NOT NULL;
PGD 3.7.4以降、DMLロックを取得せずに、 CHECK やFOREIGN KEY
制約などの特定のタイプの制約を追加できます。ただし、これには、最初にNOT VALID
制約を作成し、次に ALTER TABLE ... VALIDATE CONSTRAINT
コマンドを使用して別のトランザクションで制約を検証する2段階のプロセスが必要です。
コンストレインの追加 を参照
詳細については、
ALTER TABLE ロック#
ALTER TABLE の次のバリアントは、
DDLロックのみを取得し、DMLロックは取得しません。
ALTER TABLE ... ADD COLUMN ... (immutable) DEFAULTALTER TABLE ... ALTER COLUMN ... SET DEFAULT expressionALTER TABLE ... ALTER COLUMN ... DROP DEFAULTALTER TABLE ... ALTER COLUMN ... TYPEリライトが必要ない場合ALTER TABLE ... ALTER COLUMN ... SET STATISTICSALTER TABLE ... VALIDATE CONSTRAINTALTER TABLE ... ATTACH PARTITIONALTER TABLE ... DETACH PARTITIONALTER TABLE ... ENABLE TRIGGERENABLE REPLICA TRIGGERは引き続きDMLロックを取得しますALTER TABLE ... CLUSTER ONALTER TABLE ... SET WITHOUT CLUSTERALTER TABLE ... SET ( storage_parameter = value [, ... ] )ALTER TABLE ... RESET ( storage_parameter = [, ... ] )ALTER TABLE ... OWNER TO
ALTER TABLE
の他のすべてのバリアントは、変更されるテーブルでDMLロックを取得します。
ALTER TABLE の一部のバリアントには、以下に説明する制限があります。
ALTER TABLEの例#
この次の例は、型の変更がバイナリ強制可能であるため、テーブルの書き換えが発生しないため、機能します。カタログのみの変更として実行されます。
CREATE TABLE foo (id BIGINT PRIMARY KEY, description VARCHAR(20));
ALTER TABLE foo ALTER COLUMN description TYPE VARCHAR(128);
ただし、 VARCHAR(128) からVARCHAR(20)
への変更はバイナリ強制可能ではないため、コマンドを逆に変更することは不可能です。
ALTER TABLE foo ALTER COLUMN description TYPE VARCHAR(20);
回避策については、 Restricted DDL workarounds を参照してください。
一般におよび非レプリケート環境で可能なさまざまなタイプのALTER TABLE ... ALTER COLUMN TYPE
ATCT操作のコンテキストを提供すると役立ちます。
一部のATCT操作は、基になる列タイプのメタデータのみを更新し、基になるテーブルデータの書き換えは必要ありません。これは通常、既存の列タイプとターゲットタイプがバイナリ強制可能な場合に当てはまります。例
CREATE TABLE sample (col1 BIGINT PRIMARY KEY, col2 VARCHAR(128), col3 INT);
ALTER TABLE sample ALTER COLUMN col2 TYPE VARCHAR(256);
バイナリの強制性のため、列タイプをVARCHAR またはTEXT
データ型に変更することもできます。繰り返しますが、これは基になる列タイプの単なるメタデータの更新です。
ALTER TABLE sample ALTER COLUMN col2 TYPE VARCHAR;
ALTER TABLE sample ALTER COLUMN col2 TYPE TEXT;
ただし、col2のサイズを削減したい場合は、基になるテーブルデータの書き換えが必要になります。テーブルの書き換えは通常制限されています。
ALTER TABLE sample ALTER COLUMN col2 TYPE VARCHAR(64);
ERROR: ALTER TABLE ... ALTER COLUMN TYPE that rewrites table data may not affect replicated tables on a PGD node
非テキストタイプの例として、INTEGERタイプを使用した上記のcol3を検討します。 SMALLINTまたはBIGINTに変換しようとするATCT操作は、上記と同様の方法で失敗します。
ALTER TABLE sample ALTER COLUMN col3 TYPE bigint;
ERROR: ALTER TABLE ... ALTER COLUMN TYPE that rewrites table data may not affect replicated tables on a PGD node
これらの失敗したケースは両方とも、現在の型からターゲット型への自動割り当てキャストがあります。ただし、バイナリの強制力がないため、基になるテーブルデータの書き換えが発生します。
このような場合、制御されたDBA環境では、すべてのノードの非レプリケート環境でこの列のタイプのローリングアップグレードを採用することにより、列のタイプを自動的にキャスト可能なものに変更できます。 DDLはレプリケートされず、列型の変更は自動的にキャスト可能なものであると仮定します。次に、この同じテーブル上の他のノードでの同時アクティビティとともに、変更を実行するノードでローカルに書き換えを許可できます。次に、すべてのノードでこの非レプリケートのATCT操作を1つずつ繰り返し、 EDB Postgres分散クラスター全体で列タイプの目的の変更をもたらすことができます。これには書き換えが含まれるため、アクティビティは引き続き短期間DMLロックを取得するため、クラスター全体が利用できる必要があります。これらの詳細を設定すると、次のような非レプリケートの変更アクティビティのローリングアップグレードを実行できます。
- - foreach node in EDB Postgres Distributed cluster do:
SET bdr.ddl_replication TO FALSE;
ALTER TABLE sample ALTER COLUMN col2 TYPE VARCHAR(64);
ALTER TABLE sample ALTER COLUMN col3 TYPE BIGINT;
RESET bdr.ddl_replication;
- - done
自動割り当てキャストは多くのデータ型で利用できるため、このローカルの非レプリケートATCT操作は、さまざまな変換をサポートします。また、
USING
句を使用するATCT操作は、自動割り当てキャストがないため失敗する可能性があります。この例は、自動割り当てキャストを使用したいくつかの一般的な変換を示しています。
- - foreach node in EDB Postgres Distributed cluster do:
SET bdr.ddl_replication TO FALSE;
ATCT operations to-from {INTEGER, SMALLINT, BIGINT}
ATCT operations to-from {CHAR(n), VARCHAR(n), VARCHAR, TEXT}
ATCT operations from numeric types to text types
RESET bdr.ddl_replication;
- - done
この例は、非レプリケート環境で許可される可能性のあるATCT操作の完全なリストではありません。すべてのATCT操作が機能するわけではありません。自動割り当てができない場合、 DDLレプリケーションを無効にしても失敗します。したがって、数値型からテキスト型への変換は非レプリケート環境で機能しますが、テキスト型から数値型への逆変換は失敗します。
SET bdr.ddl_replication TO FALSE;
- - conversion from BIGINT to TEXT works
ALTER TABLE sample ALTER COLUMN col3 TYPE TEXT;
- - conversion from TEXT back to BIGINT fails
ALTER TABLE sample ALTER COLUMN col3 TYPE BIGINT;
ERROR: ALTER TABLE ... ALTER COLUMN TYPE which cannot be automatically cast to new type may not affect replicated tables on a PGD node
RESET bdr.ddl_replication;
非レプリケート環境のATCT操作はさまざまな型変換をサポートしていますが、基になるテーブルデータに新しいデータ型に割り当てできない値が含まれている場合、リライトは失敗する場合があります。たとえば、列の現在のタイプがVARCHAR(256)
で、非レプリケートATCT操作を試行してVARCHAR(128)
に変換するとします。テーブルに128バイトを超える既存のデータがある場合、書き換え操作はローカルに失敗します。
INSERT INTO sample VALUES (1, repeat(a, 200), 10);
SET bdr.ddl_replication TO FALSE;
ALTER TABLE sample ALTER COLUMN col2 TYPE VARCHAR(128);
INFO: in rewrite
ERROR: value too long for type character varying(128)
基になるテーブルデータが新しい型の特性を満たしている場合、書き換えは成功します。ただし、非レプリケートのローリングデータタイプのアップグレードをまだ実行していない他のノードが、128バイトより広い新しいデータをこのローカルATCT操作に同時に導入する場合、レプリケーションは失敗する可能性があります。これにより、クラスターでのレプリケーションが停止します。したがって、これらの非レプリケートのローリングデータ型のアップグレード操作を実行する間は、データベースおよびアプリケーションレベルでのデータ型の制限と特性に注意してください。このようなATCT操作は、制御された完全に認識したDBA環境で実行およびテストすることを強くお勧めします。これらのATCT操作は非対称であり、失敗した特定の変更をバックアウトすると、時間がかかるテーブルの書き換えが発生する可能性があります。
また、トランザクションブロックで暗黙的なキャスト可能ALTERアクティビティを実行することはできません。
ALTER TYPE#
ALTER TYPE はレプリケートされますが、
PostgreSQLはこれらの依存関係を記録しないため、グローバルDMLロックはそのデータ型を使用するすべてのテーブルに適用されません。
Restricted DDL workarounds を参照してください。
コメントオン#
COMMENT ON のすべてのバリアントが許可されますが、
COMMENT ON TABLESPACE/DATABASE/LARGE OBJECT
はレプリケートされません。
CREATE PROFILEまたはALTER PROFILE#
ファンクションがSECURITY DEFINER
の場合、プロファイルに関連付けられているPASSWORD_VERIFY_FUNCTION
はIMMUTABLE である必要があります。このようなCREATE PROFILE
またはALTER PROFILE
コマンドはレプリケートされますが、このプロファイルを使用する後続のCREATE USER
またはALTER USER コマンドは、 writer
ワーカーがcannot change current role within security-restricted operation
エラーをスローするため、レプリケーションを中断します。
CREATE SEQUENCE#
一般にCREATE SEQUENCE
がサポートされていますが、グローバルシーケンスを使用する場合、一部のオプションは効果がありません。
CREATE TABLE#
一般にCREATE TABLE はサポートされていますが、
CREATE TABLE WITH OIDS はPGDノードでは許可されていません。
CREATE TABLE ASとSELECT INTO#
CREATE TABLE AS およびSELECT INTO
は、すべてのサブコマンドも許可される場合にのみ許可されます。
EXPLAIN#
一般にEXPLAIN は許可されますが、 EXPLAIN ANALYZE
はデータベースに副作用を与える可能性があるため、いくつかの制限があります。
EXPLAIN ANALYZEレプリケーション#
EXPLAIN ANALYZE
は、分析されたステートメントのレプリケーションルールに従います。
EXPLAIN ANALYZEロック#
EXPLAIN ANALYZE
は、分析されたステートメントのロックルールに従います。
GRANTとREVOKE#
通常、GRANT およびREVOKE
ステートメントはサポートされていますが、
GRANT/REVOKE ON TABLESPACE/LARGE OBJECT はレプリケートされません。
ロックテーブル#
LOCK TABLEはレプリケートされませんが、 bdr.lock_table_locking
がon
に設定されている場合、グローバルDMLロックを取得する場合があります。
bdr.global_lock_table()
ファンクションを使用して、グローバルDMLロックを明示的に要求することもできます。
セキュリティラベル#
SECURITY LABEL のすべてのバリアントが許可されますが、
SECURITY LABEL ON TABLESPACE/DATABASE/LARGE OBJECT
はレプリケートされません。
TRUNCATEレプリケーション#
TRUNCATE コマンドは、
DDLステートメントではなくDMLとしてレプリケートされます。テーブルのTRUNCATE
がレプリケートされるかどうかは、影響を受ける各テーブルのレプリケーション設定によって異なります。
TRUNCATEロック#
TRUNCATE は他のDDLと同じ方法でレプリケートされませんが、
bdr.truncate_locking がon
に設定されている場合、グローバルDMLロックを取得できます。