postgresqlのスキーマでハマった
search_pathのデフォルトは?
hoge_db=# SHOW search_path; search_path -------------- $user,public (1 row)
作成したテーブルはデフォルトでどのスキーマに所属するのか?
hoge_db=# CREATE TABLE hoge_table (id integer,data text); CREATE TABLE hoge_db=# \dp Access privileges for database "hoge_db" Schema | Name | Type | Access privileges ----------+------------+-------+------------------- postgres | hoge_table | table | (1 row)
データベースを所有するユーザ名のスキーマに所属します。
スキーマpublicとして、先程作成したテーブルを作成する
hoge_db=# CREATE TABLE public.hoge_table (id integer,data text); CREATE TABLE
で、ここでハマった。
今まで作成したテーブルの一覧を表示してみる。
hoge_db=# \dp Access privileges for database "hoge_db" Schema | Name | Type | Access privileges ----------+------------+-------+------------------- postgres | hoge_table | table | (1 row)
あれ………、スキーマpublicのテーブルが表示されない………。
なぜ???
どうやら、
search_pathで最初に記述している$user(postgres)で、
hoge_tableが見つかったので、表示させるのを止めたみたいです。
そのため、search_pathの順番を以下のように変更させ、
リストを表示させるとスキーマpublicのほうが表示される。
hoge_db=# SET search_path TO public,postgres; SET hoge_db=# \dp Access privileges for database "hoge_db" Schema | Name | Type | Access privileges --------+------------+-------+------------------- public | hoge_table | table |