XML(拡張可能なマーク付け言語)サポートは単一の機能ではなく、データベースシステムによりサポートされる多くの機能です。 これらの機能には、保存、インポート、エキスポート、検証、インデックス付け、効率的な変更、検索、変換、XMLからSQLへの対応付けが含まれます。 PostgreSQLは、これらのXML機能のすべてではなく一部をサポートします。 PostgreSQLの今後のリリースでXMLサポートの改良を行う予定です。 データベースにおけるXMLの使用についての概要は、http://www.rpbourret.com/xml/XMLAndDatabases.htmを参照してください。
PostgreSQLはXMLに特化したデータ型を持ちません。 ユーザはXML文書を通常のTEXTフィールドに保存しなければなりません。 各要素を別々に保存するために文書を要素単位で分割する必要があれば、ミドルウェアを使用して分割しなければなりません。 しかし、一度行えば、データはリレーショナルを持つようになりますので、リレーションに従って処理しなければなりません。
XMLをリレーショナルなテーブルに対応付けする機能がありません。 このためには外部のツールを使用しなければなりません。 XMLをエキスポートする簡単な方法はHTMLモード(\pset format html)のpsqlを使用し、外部ツールを使用してXHTML出力をXMLに変換することです。
/contrib/xml2には、xml_is_well_formed()
関数があります。
これをCHECK制約で使用して、フィールドが整形式XMLを持つことを強制することができます。
特定のXMLスキーマに対する検証をサポートしません。
XML機能を持つサーバサイド言語を使用して、スキーマ指定のXML検証を行うことができます。
/contrib/xml2関数を、特定のXMLフィールドに対するインデックス付けを行う式インデックスに使用することができます。 XML文書の内容全体をインデックス付けするために、/contrib/tsearch2全文インデックスツールを使用することもできます。 もちろん、Tsearch2インデックスはXML固有なものではありません。 そのため/contrib/xml2による検査を更に問い合わせに追加すべきです。
UPDATEがXMLフィールドを更新しない場合、XMLデータは古い行と新しい行で共有されます。 しかしUPDATEがXMLフィールドを更新する場合、更新されたXMLフィールド全体の複製を内部的に作成しなければなりません。
XPathによる検索は/contrib/xml2を使用して実装されています。 これは、XMLテキスト文書を処理し、要求された問い合わせに合った結果を返します。
/contrib/xml2はXSLT(Extensible Stylesheet Language Transformation)をサポートします。
これは、XMLデータからリレーショナル構造への変換とその逆変換が含まれます。 PostgreSQL内部には、こうした対応付けのサポートはありません。 こうした変換は外部のツールに依存します。
XQuery、SQL/XML構文(ISO/IEC 9075-14)、XMLの保存に最適なXMLデータ型に関する機能は存在しません。