]ここでcolumn_constraintは以下の通りです。}またtable_constraintは以下の通りです。TABLEは現在のデータベース内に新しい外部テーブルを作成します。このテーブルはコマンドを発行したユーザにより所有されます。...)、テーブルは指定されたスキーマ内に作成されます。なければ現在のスキーマ内に作成されます。外部テーブルの名前は同じスキーマ内にある他の外部テーブル、テーブル、シーケンス、インデックス、ビュー、マテリアライズドビューと異なるものでなければなりません。TABLEはまた自動的に外部テーブルの1行に対応する複合型を表すデータ型を作成します。したがって外部テーブルは同じスキーマ内の既存のデータ型の名前と同じものを持つことができません。OF句が指定された場合、テーブルはparent_tableの指定された境界のパーティションとして作られます。外部テーブルを作成するためには、外部サーバに対するUSAGE権限とテーブルで使用される列の型すべてに対するUSAGE権限を持たなければなりません。EXISTS同じ名前のリレーションがすでに存在していてもエラーとしません。この場合注意が発せられます。既存のリレーションが作成しようとしたものと何かしら似たものであることは保証されません。table_name作成するテーブルの名前です(スキーマ修飾名でも可)。column_name新しいテーブルで作成される列の名前です。data_type列のデータ型です。これには、配列指定子を含めることができます。PostgreSQLでサポートされるデータ型の情報に関する詳細は第8章を参照してください。collationCOLLATE句は列(照合可能なデータ型でなければなりません)の照合順序を指定します。指定されなければ、列のデータ型のデフォルトの照合順序が使用されます。)オプションでINHERITS句を使い、新しい外部テーブルが自動的にすべての列を継承するテーブルのリストを指定できます。親テーブルには通常のテーブルまたは外部テーブルが指定できます。TABLEの類似の構文を参照してください。partition_bound_specこの形式は、与えられた親テーブルのパーティションとして指定されたパーティション境界値を持つ外部テーブルを作成するために使うことができます。TABLEの類似の形式を参照してください。現在のところに親テーブルにUNIQUEインデックスがある場合、親テーブルのパーティションとして外部テーブルを作成することは認められていないことに注意してください。PARTITIONも参照してください。constraint_name列制約またはテーブル制約の名前(省略可)です。positiveのような制約名を使って、クライアントアプリケーションに役立つ制約情報を通知することができます。(空白文字を含む制約名を指定するには二重引用符を使う必要があります。制約名が指定されなければ、システムが名前を生成します。NULLその列がNULL値を持てないことを指定します。NULLその列がNULL値を持てることを指定します。これがデフォルトです。この句は非標準的なSQLデータベースとの互換性のためだけに提供されています。新しいアプリケーションでこれを使用するのはお勧めしません。]CHECK句では、外部テーブルの各行が満たすと期待されるブーリアン結果を生成する式を指定します。式は外部テーブルのすべての行に対して、TRUEまたはUNKNOWNを生成し、決してFALSEにはなりません。列制約として指定したチェック制約はその列の値だけを参照しますが、テーブル制約として使われる式は複数の列を参照することができます。現在のところ、CHECKの式は副問い合わせを含むことや、現在の行の列以外の変数を参照することはできません。システム列tableoidを参照することはできますが、それ以外のシステム列を参照することはできません。INHERITと印を付けられた制約は、子テーブルに継承されません。列定義の中に現れる、列に対するデフォルトデータ値を割り当てます。値は変数がない任意の式(副問い合わせおよび、現在のテーブル内の他の列へのクロス参照は許されません)です。デフォルト式のデータ型は列のデータ型とマッチしなければなりません。デフォルト式は、列に対する値指定がないすべての挿入操作で使用されます。列に対するデフォルトがない場合、デフォルトはNULLです。STOREDこの句は、列を生成列として作成します。その列に書き込むことはできず、読み出された場合に指定された式の結果が返されます。キーワードSTOREDは、列が書き込み時に計算されることを指定するのに必要です。(計算された値は保存用に外部データラッパへと送られ、読み込み時には返されなければなりません。)生成式はテーブル内の他の列を参照できますが、他の生成列は参照できません。使われている関数や演算子はimmutableでなければなりません。他のテーブルへの参照はできません。server_name外部テーブル用に使用される既存の外部サーバの名前です。SERVERを参照してください。)新しい外部テーブルまたはその列の1つに関連するオプションです。設定可能なオプションの名前と値は外部データラッパそれぞれに固有なものであり、外部データラッパの検証関数を用いて検証されます。重複するオプション名は許されません(しかしテーブルオプションと列オプションでは同じ名前を持たせることはできます)。NULL句など)はPostgreSQLのコアシステムによって強制されませんし、ほとんどの外部データラッパもそれを強制しようとはしません。制約は単にそれが成り立つと仮定されるものです。制約は外部テーブルの機能を使って行を挿入あるいは更新するときにのみ適用され、リモートサーバ上で直接更新するなど、他の手段による行の更新には適用されませんから、それを強制することにはあまり意味はありません。その代わりに、外部テーブルに指定する制約は、リモートサーバによって強制される制約を表現するものであるべきです。一部の特別な目的の外部データラッパは、それがアクセス対象のデータにアクセスするための唯一の機構であり、またその場合、外部データラッパそれ自体にとって、制約の強制を実行することが適切なことがあります。ラッパのドキュメントにそのように書いてあるのでなければ、それを仮定しない方が良いでしょう。PostgreSQLでは外部テーブルの制約を強制しませんが、問い合わせの最適化という目的のため、制約が正しいということを仮定します。外部テーブルで、宣言された制約を満たさない行が可視の状態で存在する場合、そのテーブルに対する問い合わせは誤った結果をもたらすかもしれません。制約の定義が現実に即したものであることを保証するのは、ユーザの責任です。似たような配慮は生成列に適用されます。保存生成列は、ローカルのPostgreSQLサーバ上で挿入されたり更新されたりした時に計算され、外部データ保存領域へ書き出すために外部データラッパへと渡されますが、外部テーブルへの問い合わせが生成式と矛盾しない保存生成列の値を返すことは強制されていません。ここでも、問い合わせの結果が正しくないということになる可能性があります。(外部データラッパがタプルルーティングをサポートしていれば)行はローカルパーティションから外部テーブルパーティションへ移動できますが、外部テーブルパーティションから別のパーティションには移動できません。例サーバfilm_serverを通してアクセスされる、外部テーブルfilmsを作成します。film_server;範囲パーティションテーブルmeasurementのパーティションとして、サーバserver_07を通してアクセスされる外部テーブルmeasurement_y2016m07を作成します。TABLEはおおよそ標準SQLに準拠します。TABLEとほとんど同様、NULL制約とゼロ列の外部テーブルが許されます。列のデフォルト値を指定する機能もPostgreSQLの拡張です。PostgreSQLが定義する形式のテーブルの継承は標準とは異なります。