

Auroraクエリエディタでsearch_pathを設定してもcurrent_schema()がnullになる
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
Aurora PostgreSQLのクエリエディタでスキーマを切り替えようとして詰まった話。
何が起きたか
クエリエディタでDBに接続したあと、スキーマをmy_schemaに切り替えたくて
SET search_path TO my_schema;を実行。続けて確認のつもりで
SELECT current_schema();を叩いたらnullが返ってきた。
current_schema()はsearch_path上で最初に解決できるスキーマを返すはずなので、nullになるのは基本的に「そのスキーマが存在しない」か「権限がない」パターン。なので疑ったのはまずスキーマの存在。
SELECT schema_nameFROM information_schema.schemataWHERE schema_name = 'my_schema';これは普通にmy_schemaが返ってくる。存在はしてる。権限周りかと思ってSHOW search_path;も見てみたら
"$user", publicのまま。つまりSET search_path自体がそもそも反映されてなかった。
原因
Auroraのクエリエディタはデフォルトでオートコミットモードになっている。SET search_pathのようなセッションローカルな設定は、オートコミット単位でリセットされる挙動になっていて、次のステートメントを打つ頃にはsearch_pathが元に戻ってしまう。
なのでSET search_path TO my_schema;は成功しているように見えても、実質「そのステートメント限りの設定」で終わっていて、後続のcurrent_schema()には反映されない。
クエリエディタのモードをトランザクションモードに切り替えたら、SET search_pathが同一セッション内で保持されるようになって、current_schema()も期待通りmy_schemaを返した。
結論
AuroraクエリエディタでSET search_pathのようなセッション設定を使うなら、オートコミットモードだと効かない(次のクエリで消える)。トランザクションモードに切り替えるのが一つの対応。
恒久的にスキーマを固定したいなら、そもそもSET search_pathをその場で打つんじゃなくて
- クエリ側で
my_schema.my_tableのようにスキーマ修飾する - ロールのデフォルトを変えておく
ALTER ROLE your_userSET search_path TO my_schema, public;のどれかの方が事故らない。特にクエリエディタ経由の一時的な作業だとオートコミットのままセッション設定を信じない方がよさそう。