以下の関数を使ってWALにユーザログを挿入することができます。
pgx_emit_userlog(content text) 戻り値の型:pg_lsn
pgx_emit_userlog(content bytea) 戻り値の型:pg_lsn
contentに挿入したいユーザログを指定してください。userlog.limit_size_per_xactパラメータ以外によるトランザクション内の総サイズへの制限がある他は、指定するデータの長さに対する特別の上限はありません。
pgx_emit_userlog()の引数にtext型のデータを与えた場合には、データベースの文字符合化方式に変換した後の長さで制限されることに注意してください。
本関数と同様にWALにログを挿入するpg_logical_emit_message関数と同じように、導入後はすべてのユーザが実行することが可能です。GRANT/REVOKE文を使ってポリシーに合うように権限を調整してください。
ユーザログ拡張は、登録先のスキーマの再配置が可能です。
select pgx_emit_userlog('some user log')
指定したユーザログが挿入されたWAL上のログ位置を返します。
PostgreSQLのpg_logical_emit_message関数が返すエラーに加えて、以下のエラーが返ります。
サブトランザクションの中でこれらの関数を使用した場合には、SQLSTATE:0A000を返却してトランザクションをROLLBACKします。
関数を使用したことによって、トランザクション内のユーザログ挿入総サイズがuserlog.limit_size_per_xactを上回る場合には、SQLSTATE:54000を返却してトランザクションを内部的にABORTにしてSQLを続けて実行できなくなるので、明示的にROLLBACK文を実行してトランザクションを終了してください。