1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQLの備忘録

Last updated at Posted at 2022-04-14

PostgreSQL

  • PostgreSQLについての自分用メモです。
  • 普段使わないようなクエリは忘れてしまうのでまとめています。
  • マニュアルではないので、オプションなどは自分がつかうもののみ記入しています。

データベース

データベース操作

データベース一覧

  • SQL
sql {.line-numbers}
SELECT * FROM pg_database;
  • PSQL
\l

データベース作成

sql {.line-numbers}
CREATE DATABASE {データベース名};

データベース削除

sql {.line-numbers}
DROP DATABASE {データベース名};

サーチパス(デフォルトスキーマ)

sql {.line-numbers}
SHOW search_path;
  • デフォルトスキーマを返す

サーチパス(デフォルトスキーマ)置き換え

sql {.line-numbers}
SET search_path TO {スキーマ名};

データベースの容量

sql {.line-numbers}
SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;

バックアップ&リストア(DOSコマンド)

バックアップ(プレーン)

  • dosコマンド
bash {.line-numbers}
pg_dump -h {ホスト名 or IP} -p {ポート番号} -F p -U {ユーザ名} {DB名} > {ファイル名}
{パスワード}

バックアップ(カスタム)

  • dosコマンド
bash {.line-numbers}
pg_dump -h {ホスト名 or IP} -p {ポート番号} -F c -U {ユーザ名} {DB名} > {ファイル名}
{パスワード}

リストア(プレーン)

  • dosコマンド
bash {.line-numbers}
psql -h {ホスト名 or IP} -p {ポート番号} -U {ユーザ名} {DB名} < {ファイル名}
{パスワード}

リストア(カスタム圧縮)

  • dosコマンド
bash {.line-numbers}
pg_restore -h {ホスト名 or IP} -p {ポート番号} -U {ユーザ名} -d {DB名} {ファイル名}
{パスワード}

テーブル設計

スキーマ

スキーマ一覧

sql {.line-numbers}
SELECT * FROM pg_namespace;

スキーマ作成

sql {.line-numbers}
CREATE SCHEMA {スキーマ名};

スキーマ削除

sql {.line-numbers}
DROP SCHEMA {スキーマ名} [CASCADE];
  • CASCADE ・・・ スキーマ内にオブジェクトがあっても削除する

テーブル操作

テーブル一覧

sql {.line-numbers}
SELECT * FROM pg_tables;

テーブル作成

sql {.line-numbers}
CREATE TABLE [IF NOT EXISTS] {スキーマ名}.{テーブル名} (
    {カラム名} {型} [{NOT NULL / NULL}]
    [, ...]
    CONSTRAINT {プライマリキー名} PRIMARY KEY ({フィールド名}[, ...])
)
  • IF NOT EXISTS ・・・ テーブルが存在していないとき
  • NOT NULL ・・・ NULLを許可しない
  • NULL ・・・ NULLを許可する

テーブル削除

sql {.line-numbers}
DROP TABLE [IF EXISTS] {スキーマ名}.{テーブル名} [CASCADE | RESTRICT];
  • IF EXISTS ・・・ テーブルが存在したら
  • CADCADE ・・・ 参照されていても強制削除(参照が削除される)
  • RESTRICT ・・・ 【デフォルト】参照がある場合は削除できない

プライマリキー

プライマリキー一覧

sql {.line-numbers}
SELECT * FROM information_schema.table_constraints;

プライマリキー追加

sql {.line-numbers}
ALTER TABLE {スキーマ名}.{テーブル名} ADD CONSTRAINT {プライマリキー名}
 PRIMARY KEY ({フィールド名} [, ...]);

プライマリキー削除

sql {.line-numbers}
ALTER TABLE {スキーマ名}.{テーブル名} DROP CONSTRAINT {プライマリキー名};
--NOT NULL属性は消えないので、以下のようにして制約を消す
--ALTER TABLE {スキーマ名}.{テーブル名} ALTER COLUMN {フィールド名} DROP NOT NULL;

プライマリキーフィールド一覧

sql {.line-numbers}
SELECT ccu.column_name as COLUMN_NAME
 FROM information_schema.table_constraints tc
 INNER JOIN information_schema.constraint_column_usage ccu
 ON (
       tc.table_catalog  = ccu.table_catalog
   and tc.table_schema   = ccu.table_schema
   and tc.table_name     = ccu.table_name
   and tc.constraint_name= ccu.constraint_name
 )
 WHERE tc.table_catalog  = '{データベース名}'
   and tc.table_schema   = '{スキーマ名}'
   and tc.table_name     = '{テーブル名}'
   and tc.constraint_type= 'PRIMARY KEY'

インデックス

インデックス一覧

sql {.line-numbers}
SELECT * FROM pg_indexes;

インデックスの追加

sql {.line-numbers}
CREATE INDEX {テーブル名}_idx
 ON {スキーマ名}.{テーブル名} ( {フィールド名1}, {フィールド名2},,, );

インデックスの削除

sql {.line-numbers}
DROP INDEX IF EXISTS {インデックス名};

列一覧

sql {.line-numbers}
SELECT * FROM information_schema.columns;

列の追加

sql {.line-numbers}
ALTER TABLE {スキーマ}.{テーブル名} ADD COLUMN {カラム名称} {型};

列の削除

sql {.line-numbers}
ALTER TABLE {スキーマ}.{テーブル名} DROP COLUMN {カラム名称};

列の定義変更

sql {.line-numbers}
ALTER TABLE {スキーマ}.{テーブル名} ALTER COLUMN {フィールド名} TYPE {型};

SERIAL

SERIAL一覧

sql {.line-numbers}
SELECT * FROM pg_class c WHERE c.relkind='S';

SERIAL更新

sql {.line-numbers}
SELECT SETVAL ('[スキーマ名.]シーケンス名', '番号');
  • 2022/09/07追記:スキーマ名記述

管理

ユーザ

  • ユーザはロールの別名扱いで削除予定

ユーザ一覧

sql {.line-numbers}
SELECT * FROM pg_user;

ユーザ作成

sql {.line-numbers}
CREATE USER {ユーザ名};

ユーザ削除

sql {.line-numbers}
DROP USER {ユーザ名};

ユーザにパスワードを設定

sql {.line-numbers}
ALTER USER {ユーザ名} WITH PASSWORD '{パスワード}';

ロール

ロール一覧

sql {.line-numbers}
SELECT * FROM pg_roles;

ロール作成

sql {.line-numbers}
CREATE ROLE {ロール名};

型一覧

数値

型名 格納サイズ 説明 範囲
smallint 2バイト 狭範囲の整数 -32768から+32767
integer 4バイト 典型的に使用する整数 -2147483648から+2147483647
bigint 8バイト 広範囲整数 -9223372036854775808から9223372036854775807
decimal 可変長 ユーザ指定精度、正確 小数点前までは131072桁、小数点以降は16383桁
numeric 可変長 ユーザ指定精度、正確 小数点前までは131072桁、小数点以降は16383桁
real 4バイト 可変精度、不正確 6桁精度
double precision 8バイト 可変精度、不正確 15桁精度
smallserial 2バイト 狭範囲自動整数 1から32767
serial 4バイト 自動増分整数 1から2147483647
bigserial 8バイト 広範囲自動増分整数 1から9223372036854775807

通貨

型名 格納サイズ 説明 範囲
money 8バイト 貨幣金額 -92233720368547758.08 から +92233720368547758.07

文字列

型名 説明
character varying(n)、varchar(n) 上限付き可変長
character(n)、char(n) 空白で埋められた固定長
text 制限なし可変長

バイナリ型

型名 格納サイズ 説明
bytea 1または4バイトと実際のバイナリ列の長さ 可変長のバイナリ列

日付/時刻データ型

型名 格納サイズ 説明 最遠の過去 最遠の未来 精度
timestamp [ (p) ] [ without time zone ] 8 バイト 日付と時刻両方(時間帯なし) 4713 BC 294276 AD 1μ秒、14桁
timestamp [ (p) ] with time zone 8バイト 日付と時刻両方、時間帯付き 4713 BC 294276 AD 1μ秒、14桁
date 4バイト 日付(時刻なし) 4713 BC 5874897 AD 1日
time [ (p) ] [ without time zone ] 8バイト 時刻(日付なし) 00:00:00 24:00:00 1μ秒、14桁
time [ (p) ] with time zone 12バイト その日の時刻のみ、時間帯付き 00:00:00+1459 24:00:00-1459 1μ秒、14桁
interval [ fields ] [ (p) ] 12バイト 時間間隔 -178000000年 178000000年 1μ秒、14桁

論理値データ型

名前 格納サイズ 説明
boolean 1バイト 真または偽の状態

幾何データ型

型名 格納サイズ 表現 説明
point 16バイト 平面における座標点 (x,y)
line 32バイト 無限の直線(完全には実装されていません) ((x1,y1),(x2,y2))
lseg 32バイト 有限の線分 ((x1,y1),(x2,y2))
box 32バイト 矩形 ((x1,y1),(x2,y2))
path 16+16nバイト 閉経路(多角形に類似) ((x1,y1),...)
path 16+16nバイト 開経路 [(x1,y1),...]
polygon 40+16nバイト 多角形(閉経路に類似) ((x1,y1),...)
circle 24バイト <(x,y),r>(中心と半径)

ネットワークアドレス型

名前 格納サイズ 説明
cidr 7もしくは19バイト IPv4、およびIPv6ネットワーク
inet 7もしくは19バイト IPv4もしくはIPv6ホスト、およびネットワーク
macaddr 6バイト MACアドレス
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?