環境:PostgreSQL 9.1
pg 9.0 より前では、テーブルTEXT
から対応するレコードを選択すること で、ラージ オブジェクト フィールドの実際のデータを取得できました。pg_largeobject
しかし、pg 9.0 以降、非スーパーユーザーはこのテーブルにアクセスできなくなりました。
ただし、休止状態を使用すると、同じ非スーパーユーザー アカウントがこのTEXT
フィールドの実際のデータにアクセスできます。そのため、非スーパーユーザー アカウントを使用すると、この TEXT フィールドの実際の内容を「選択」することもできると思います。どうすればいいですか?
Craig が提案したように、設定でログ収集をオンにするlog_statement = 'all'
と、関連するログは次のようになります。
SELECT p.proname,p.oid
FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n
WHERE p.pronamespace=n.oid AND n.nspname='pg_catalog'
AND ( proname = 'lo_open' or proname = 'lo_close' or proname = 'lo_creat' or proname = 'lo_unlink'
or proname = 'lo_lseek' or proname = 'lo_tell' or proname = 'loread' or proname = 'lowrite'
or proname = 'lo_truncate')
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_open" (OID 952)
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_open" (OID 952)
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_lseek" (OID 956)
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_tell" (OID 958)
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_lseek" (OID 956)
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_tell" (OID 958)
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_lseek" (OID 956)
2012-08-31 09:27:05 HKT LOG: fastpath function call: "loread" (OID 954)
2012-08-31 09:27:05 HKT LOG: fastpath function call: "loread" (OID 954)
2012-08-31 09:27:05 HKT LOG: fastpath function call: "loread" (OID 954)
2012-08-31 09:27:05 HKT LOG: fastpath function call: "lo_close" (OID 953)
複数の lo_XXX() 関数を呼び出しますが、 select ステートメントで簡単に呼び出せるように PL/pgSQL 関数として作成する方法がわかりません。
ありがとう。