環境
- PostgreSQL 15
主な操作
DB操作
DB作成
CREATE DATABASE "db_name" ENCODING "UTF8" LC_COLLATE "C" LC_CTYPE "C" TEMPLATE template0;
DB一覧表示
# Macならoption + ¥ でバックスラッシュなので、これにl(エル)
postgres-> \l
アクティブなDB切り替え
\c db_name;
DB削除
DROP DATABASE db_name;
現在アクティブなDBを確認
SELECT current_database();
スキーマ操作
スキーマ作成
CREATE SCHEMA public
スキーマ削除
drop schema public cascade;
テーブル操作
アクティブなDBのテーブル一覧表示
\dt;
取得
特にMySQLと大きな差異なし
select * from table_name;
削除
特にMySQLと大きな差異なし
DROP TABLE if exists table1,table2 CASCADE;
ダンプ
-Fpはプレーンテキスト形式で出力、-bでブロブデータも出力、-vで詳細モード
# /Library/PostgreSQL/15/bin/pg_dump -h ホスト -U ユーザー名 -p ポート -Fp -b -v データベース名 > 出力ファイル名
/Library/PostgreSQL/15/bin/pg_dump -h 127.0.0.1 -U postgres -p 5432 -Fp -b -v sample_db > sample_db.sql
ダンプのリストア
# psql -U {ユーザ名} -h {ホスト名} -p {ポート番号} -d {データベース名} -f {ダンプファイル名}
/Library/PostgreSQL/15/bin/psql -h 127.0.0.1 -U postgres -p 5432 -d sample_db2 -f sample_db.sql
文字セット
文字セットの確認
SELECT character_set_name FROM information_schema.character_sets;
utf8とutf8mb4の違いMySQL)
- utf8は文字を1〜3バイトで表現する。
- utf8mb4は文字を1〜4バイトで表現する。よって、4バイトで表現される文字(絵文字など)
- postgresでは、utf8mb4という文字セットはなくutf-8が相当しpostgresのutf-8は4バイト文字も対応している
- MySQlLのutf8mb4_binと同様の処理になる
Postgresのサポートしている文字コード
https://www.postgresql.org/docs/current/multibyte.html#MULTIBYTE-CHARSET-SUPPORTED
文字セット
文字セットの確認
SELECT character_set_name FROM information_schema.character_sets;
utf8とutf8mb4の違い
- utf8は文字を1〜3バイトで表現するが、utf8mb4は文字を1〜4バイトで表現する。よって、4バイトで表現される文字も処理可能になる(絵文字など)
- postgresでは、utf8mb4という文字セットはなくutf-8が相当し、postgresのutf-8は4バイト文字も対応している
Postgresでサポートしている文字コード
https://www.postgresql.org/docs/current/multibyte.html#MULTIBYTE-CHARSET-SUPPORTED
ロケール関連
LC_COLLATE
文字列の比較やソート順序に影響する。
C
- エンコーディングのバイナリ値(0と1の組み合わせ)で文字列の比較やソートが適用されるため、ロケールによる違いによる影響がない。
- 英字の大文字小文字、全角半角、濁音、半濁音、ひらがな、カタカナ全て区別し、完全な文字の一致を照合する
ja_JP.utf8
文字列の比較やソートに日本語の規則が適用される。辞書にあるような五十音順の並び順になる
en_US.UTF-8
英語のロケールに基づくので、日本語の文字列の比較やソートが正しく動作しない。
LC_CTYPE
文字の分類、文字列操作に関する規則に影響する
LC_MESSAGES
通知・診断メッセージに影響する
LC_MONETARY
通貨のフォーマットに影響する
LC_NUMERIC
通貨ではない数値のフォーマットに影響する
LC_TIME
日時フォーマットに影響する
各種ロケール関連の設定の確認
select name, setting, context from pg_settings where name like 'lc%';
各種ロケール関連の設定の変更
例えば、lc_monetaryであれば以下の通り
ALTER DATABASE "db_name" SET lc_monetary = "ja_JP.UTF-8";
まとめ
いかがでしたでしょうか。本記事では、最低限押さえておきたいPostgreSQLの基礎というテーマで、基本的な操作や文字セット、ロケールの確認方法や設定方法について紹介しています。MySQLとの比較なども織り交ぜつつ紹介していますのでぜひ参考にしてみてください。