DDL Command handling matrix
===========================

次の表では、許可されるユーティリティまたはDDLコマンド、レプリケートされるもの、およびレプリケート時に使用されるグローバルロックの種類について説明します。

``ALTER TABLE``
のようなより複雑なステートメントの場合、これらは実行されるサブコマンドによって異なる場合があります。このようなすべてのコマンドには、次の表の下に詳細な説明があります。

コマンドマトリックス
--------------------

.. csv-table::
  :header: Command,Allowed,Replicated,Lock
  :widths: 15,5,5,10
  :align: left
  :class: longtable

  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,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` 
  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,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` ,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,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` ,Y,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` 
  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,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` ,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,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` 
  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,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` ,Y,DDL
  CREATE SERVER,Y,Y,DDL
  CREATE STATISTICS,Y,Y,DDL
  CREATE SUBSCRIPTION,Y,Y,DDL
  CREATE SYNONYM,Y,Y,DDL
  CREATE TABLE,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` ,Y,DDL
  CREATE TABLE AS,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` ,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,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` ,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` 
  FETCH,Y,N,N
  GRANT,Y,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` ,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,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` 
  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,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` ,DDL
  REVOKE ROLE,Y,Y,DDL
  ROLLBACK,Y,N,N
  ROLLBACK PREPARED,Y,N,N
  SAVEPOINT,Y,N,N
  SECURITY LABEL,Y,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` ,DDL
  SELECT INTO,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` ,Y,DDL
  SET,Y,N,N
  SET CONSTRAINTS,Y,N,N
  SHOW,Y,N,N
  START TRANSACTION,Y,N,N
  TRUNCATE TABLE,Y,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` ,:ref:`アーキテクチャの詳細<アーキテクチャの詳細>` 
  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)``
   —これは、現在別のノードで別のデータになるため、許可されていません。推奨される回避策については、
   :ref:`列の追加 <列の追加>` を参照してください。

-  ``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を長期間保持するため、このようなコマンドは、いずれの場合も高可用データベースでは実行不可能である可能性があります。推奨される回避策については、
   :ref:`カラムのタイプの変更 <カラムのタイプの変更>` を参照してください。

-  ``ALTER TABLE ... ADD FOREIGN KEY``
   —現在のユーザーが参照されるテーブルを読み取る権限がない場合、または参照されるテーブルで現在のユーザーがバイパスできないRLS制限が有効になっている場合、サポートされません。

次の例は、 ``timestamp`` 型の定数値を\ ``timestamptz``
型の列に追加しようとするため、失敗します。 ``timestamp``
と\ ``timestamptz``
間のキャストは、セッションのタイムゾーンに依存するため、不変ではありません。

.. code:: sql

   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段階のプロセスが必要です。
 :ref:`コンストレインの追加 <コンストレインの追加>` を参照

詳細については、


ALTER TABLE ロック
^^^^^^^^^^^^^^^^^^

``ALTER TABLE`` の次のバリアントは、
DDLロックのみを取得し、DMLロックは取得しません。

-  ``ALTER TABLE ... ADD COLUMN ... (immutable) DEFAULT``

-  ``ALTER TABLE ... ALTER COLUMN ... SET DEFAULT expression``

-  ``ALTER TABLE ... ALTER COLUMN ... DROP DEFAULT``

-  ``ALTER TABLE ... ALTER COLUMN ... TYPE`` リライトが必要ない場合

-  ``ALTER TABLE ... ALTER COLUMN ... SET STATISTICS``

-  ``ALTER TABLE ... VALIDATE CONSTRAINT``

-  ``ALTER TABLE ... ATTACH PARTITION``

-  ``ALTER TABLE ... DETACH PARTITION``

-  ``ALTER TABLE ... ENABLE TRIGGER`` ``ENABLE REPLICA TRIGGER``
   は引き続きDMLロックを取得します

-  ``ALTER TABLE ... CLUSTER ON``

-  ``ALTER TABLE ... SET WITHOUT CLUSTER``

-  ``ALTER TABLE ... SET ( storage_parameter = value [, ... ] )``

-  ``ALTER TABLE ... RESET ( storage_parameter = [, ... ] )``

-  ``ALTER TABLE ... OWNER TO``

``ALTER TABLE``
の他のすべてのバリアントは、変更されるテーブルでDMLロックを取得します。
``ALTER TABLE`` の一部のバリアントには、以下に説明する制限があります。

ALTER TABLEの例
^^^^^^^^^^^^^^^

この次の例は、型の変更がバイナリ強制可能であるため、テーブルの書き換えが発生しないため、機能します。カタログのみの変更として実行されます。

.. code:: sql

   CREATE TABLE foo (id BIGINT PRIMARY KEY, description VARCHAR(20));
   ALTER TABLE foo ALTER COLUMN description TYPE VARCHAR(128);

ただし、 ``VARCHAR(128)`` から\ ``VARCHAR(20)``
への変更はバイナリ強制可能ではないため、コマンドを逆に変更することは不可能です。

.. code:: sql

   ALTER TABLE foo ALTER COLUMN description TYPE VARCHAR(20);

回避策については、 :ref:`Restricted DDL workarounds <Workarounds for DDL restrictions>` を参照してください。

一般におよび非レプリケート環境で可能なさまざまなタイプの\ ``ALTER TABLE ... ALTER COLUMN TYPE``
ATCT操作のコンテキストを提供すると役立ちます。

一部のATCT操作は、基になる列タイプのメタデータのみを更新し、基になるテーブルデータの書き換えは必要ありません。これは通常、既存の列タイプとターゲットタイプがバイナリ強制可能な場合に当てはまります。例

.. code:: sql

   CREATE TABLE sample (col1 BIGINT PRIMARY KEY, col2 VARCHAR(128), col3 INT);
   ALTER TABLE sample ALTER COLUMN col2 TYPE VARCHAR(256);

バイナリの強制性のため、列タイプを\ ``VARCHAR`` または\ ``TEXT``
データ型に変更することもできます。繰り返しますが、これは基になる列タイプの単なるメタデータの更新です。

.. code:: sql

   ALTER TABLE sample ALTER COLUMN col2 TYPE VARCHAR;
   ALTER TABLE sample ALTER COLUMN col2 TYPE TEXT;

ただし、col2のサイズを削減したい場合は、基になるテーブルデータの書き換えが必要になります。テーブルの書き換えは通常制限されています。

.. code:: sql

   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操作は、上記と同様の方法で失敗します。

.. code:: sql

   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ロックを取得するため、クラスター全体が利用できる必要があります。これらの詳細を設定すると、次のような非レプリケートの変更アクティビティのローリングアップグレードを実行できます。

.. code:: sql

   - - 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操作は、自動割り当てキャストがないため失敗する可能性があります。この例は、自動割り当てキャストを使用したいくつかの一般的な変換を示しています。

.. code:: sql

   - - 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レプリケーションを無効にしても失敗します。したがって、数値型からテキスト型への変換は非レプリケート環境で機能しますが、テキスト型から数値型への逆変換は失敗します。

.. code:: sql

   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バイトを超える既存のデータがある場合、書き換え操作はローカルに失敗します。

.. code:: sql

   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ロックはそのデータ型を使用するすべてのテーブルに適用されません。
 :ref:`Restricted DDL workarounds <Workarounds for DDL restrictions>` を参照してください。


コメントオン
^^^^^^^^^^^^

``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ロックを取得できます。
