PostgreSQLのスキーマについてメモ書き。
概要
PosgtreSQLは「データベース」-「スキーマ」-「テーブル」の階層構造になっている。
デフォルトのスキーマはpublic。
スキーマ一覧表示
スキーマ一覧はメタコマンド「¥dn」で表示する。
admin=# \dn
List of schemas
Name | Owner
--------+-------------------
public | pg_database_owner
(1 row)
スキーマの作成
スキーマの作成はcreate schema文で行う。
以下ではtestスキーマを作成している。
admin=# create schema test;
CREATE SCHEMA
admin=# \dn
List of schemas
Name | Owner
--------+-------------------
public | pg_database_owner
test | admin
(2 rows)
使用中のスキーマを確認
current_schemaで使用中のスキーマを確認できる。
admin=# select current_schema;
current_schema
----------------
public
(1 row)
以下show search_pathでスキーマ検索パス(スキーマの検索順)を確認できる。
※ このデータベースにはユーザ名のスキーマが存在しないため、publicが使用中のスキーマとなる。
admin=# show search_path;
search_path
-----------------
"$user", public
(1 row)
スキーマ変更
カレントスキーマを変更。
admin=# set search_path = test;
SET
admin=# select current_schema();
current_schema
----------------
test
(1 row)
もしくは以下。
※ スキーマを明示的に変更した場合、スキーマ検索パスは変更したスキーマになる。
admin=# set search_path to public;
SET
admin=# show search_path;
search_path
-------------
public
(1 row)
スキーマにテーブル作成
スキーマが別であれば、同じ名前のテーブルを作成できる。
# カレントスキーマはtest
admin=# select current_schema();
current_schema
----------------
test
(1 row)
# test_tableテーブルを作成
admin=# create table test_table (t_id integer, t_member varchar(100));
CREATE TABLE
# ¥dtメタコマンド使用し、testスキーマにテーブルが作成された事を確認
admin=# \dt
List of relations
Schema | Name | Type | Owner
--------+------------+-------+-------
test | test_table | table | admin
(1 row)
# publicスキーマを指定(public.test_table)し、同一名称のテーブルを作成
create table public.test_table (t_id integer, t_member varchar(100));
# publicにtest_tableテーブルが作成された事を確認
admin=# \dt public.*
List of relations
Schema | Name | Type | Owner
--------+------------+-------+-------
public | test_table | table | admin
(1 row)
スキーマ検索パス
オブジェクトを作成するデフォルトのスキーマは、postgresql.confファイルのsearch_pathパラメータで設定する。
先頭から順に実在するスキーマを検索する。
# $userはユーザ名と同じスキーマ。postgresql.confの設定を確認
$ grep search_path postgresql.conf
search_path = '"$user", public' # schema names
# PostgreSQLにログインし、スキーマ検索パスにtestスキーマを設定
admin=# set search_path to test;
SET
admin=# show search_path;
search_path
-------------
test
(1 row)
# 一旦ログアウトし、再度PostgreSQLにログイン
admin=# exit
$ psql -U admin
psql (15.1 (Debian 15.1-1.pgdg110+1))
Type "help" for help.
# スキーマ検索パスがデフォルト設定に戻る
admin=# show search_path;
search_path
-----------------
"$user", public
(1 row)
postgresql.confファイルのsearch_pathパラメータ変更は、pg_ctl reloadコマンドで反映。
※ pg_settingsのcontextがuserなので、pg_ctl reloadコマンドでOK。
admin=# select name,context from pg_settings where name like 'search_path';
name | context
-------------+---------
search_path | user
(1 row)
スキーマ削除
スキーマの削除はdrop schema文で行う。
# cascadeを指定しテーブルごと削除
admin=# drop schema if exists test cascade;
NOTICE: drop cascades to table test.test_table
DROP SCHEMA
admin=# \dn
List of schemas
Name | Owner
--------+-------------------
public | pg_database_owner
(1 row)
コメント