Masayan tech blog.

  1. ブログ記事一覧>
  2. 最低限押さえておきたいPostgreSQL(基本的な操作、文字セット、ロケール)

最低限押さえておきたいPostgreSQL(基本的な操作、文字セット、ロケール)

公開日

環境

  • 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との比較なども織り交ぜつつ紹介していますのでぜひ参考にしてみてください。