COPY TO/FROM と security_context

COPY TO/FROM 構文の主な用途は、データベースのバックアップとリストアで、pg_dumpコマンドが内部的に使っている。

pg_dumpでセキュリティコンテキスト付きのCOPY TO/FROMを可能にするには、若干、COPYコマンドの実装に手を加える必要があった。
実は、昔の('07/01頃の)SE-PostgreSQLの実装ではこんな必要はなかったのだが、セキュリティコンテキスト情報をシステム列に持たせるようにしたために、特殊なハンドリングが必要になったというオチ。
(ちなみに、昔は勝手に隠れカラムを作る実装にしていた。こちらの方が全体としての手間が多い)

別のシステム列であるOIDのCOPY TO/FROM にしても、特殊なハンドリングをしていて、ハンドリングがややばっちい。
例えば、COPY sample_tbl(oid, x, y, z) TO STDOUT; というような指定はできず、with OIDS オプションを付けることでOID列をダンプする。
これだと、OID列が必ず行頭に来るとか制約が出てしまう。ダンプするカラムの一覧にOIDが来たら、OID列をエクスポートする方がユーザ見えには素直なのではなかろうか。

この辺、PGACE/SE-PostgreSQLが本流にマージされて、堂々と本体の実装を修正できるようにしたら楽なんだがなぁ。
今のところは、将来バージョンに対するパッチの適用可能性を確保するために、最大限、修正箇所を少なくするというアプローチでコードを書かざるを得ない。