SE-PostgreSQL/拡張SQL構文

CREATE TABLE構文/CREATE DATABASE構文/CREATE FUNCTION構文に、CONTEXT='xxx'オプションを追加した。
これによって、明示的にセキュリティコンテキストを指定してDBオブジェクトを新しく作成することができる。この機能拡張の意図は、pg_dump/pg_restoreコマンドでセキュリティコンテキスト付きのバックアップ・リストアをより実装しやすくするため。

また、(1)デフォルトのセキュリティコンテキストでDBオブジェクトを作成 (2)それをALTER構文で変更、というのと、最初から目的のセキュリティコンテキストでDBオブジェクトを作成するのとは、やや意味合いが異なる。
最初のケースでは、デフォルトのタイプに対して{create relabelfrom}と目的のタイプに{relabelto}が必要になるが、今回の拡張によって目的のタイプに対する{create}のみで十分となり、より自然な形でポリシーを記述できる。

CREATE TABLE <tblname> (
<colname1> <TYPE> [<CONSTRAINT>] [CONTEXT = '<column context>,
<colname1> <TYPE> [<CONSTRAINT>] [CONTEXT = '<column context>'
) [CONTEXT = '<table context>'];
テーブルのセキュリティコンテキスト、カラムのセキュリティコンテキストを同時に指定できる。
CREATE DATABASE <dbname> [CONTEXT = '<database context>';
CREATE FUNCTION <fnname> (<TYPES>...) RETURNS <TYPE>
LANGUAGE <lang> [CONTEXT = '<function context>'];
[AS <definition>];