PostgreSQL

1.PostgreSQLとは
PostgreSQLは、カリフォルニア大学バークレイ校のコンピュータサイエンス学科で開発されたPOSTGRES, Version 4.2をベースにしたオブジェクトリレーショナルデータベース管理システム(ORDBMS)。

2.PostgreSQLのインストールと基本

2.1 動作環境
 VirtualBox仮想マシン
 ホストOS Windows10 
 ゲストOS Ubuntu 16.04

2.2 PostgresSQLのインストール
https://www.postgresql.org/download/
(1)ファイルリポジトリ構成を作成
 $ sudo sh -c ‘echo “deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main” > /etc/apt/sources.list.d/pgdg.list’
(2)リポジトリ署名キーをインポート
 $ wget –quiet -O – https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add –
(3)パッケージリストを更新
 $ sudo apt-get update
(4)最新バージョンのPostgreSQLをインストール
 $ sudo apt-get -y install postgresql
(5)バージョン確認
 $ psql –version
 psql (PostgreSQL) 13.3 (Ubuntu 13.3-1.pgdg16.04+1)

2.3 PostgreSQLのロールとデータベースの使用
(1)postgresユーザにログインする
 ※postgresインストール時にOSのユーザpostgresが自動的に作成される
 $ sudo -i -u postgres
 postgres@****-VirtualBox:~$

pqsl --help
psql は PostgreSQL の対話型ターミナルです。
使い方:
  psql [オプション]... [データベース名 [ユーザ名]]

一般的なオプション:
  -c, --command=コマンド   単一の(SQLまたは内部)コマンドを一つだけ実行して終了
  -d, --dbname=DB名        接続するデータベース名(デフォルト: "koba")
  -f, --file=FILENAME      ファイルからコマンドを読み込んで実行後、終了
  -l(エル), --list         使用可能なデータベース一覧を表示して終了
  -v, --set=, --variable=名前=値
                           psql 変数 '名前' に '値' をセット
                           (例: -v ON_ERROR_STOP=1)
  -V, --version            バージョン情報を表示して終了
  -X, --no-psqlrc          初期化ファイル (~/.psqlrc) を読み込まない
  -1 (数字の1), --single-transaction
                           (対話形式でない場合)単一のトランザクションとして実行
  -?, --help[=options]     このヘルプを表示して終了
      --help=commands      バックスラッシュコマンドの一覧を表示して終了
      --help=variables     特殊変数の一覧を表示して終了

入出力オプション:
  -a, --echo-all           スクリプトから読み込んだ入力をすべて表示
  -b, --echo-errors        失敗したコマンドを表示
  -e, --echo-queries       サーバへ送信したコマンドを表示
  -E, --echo-hidden        内部コマンドが生成した問い合わせを表示
  -L, --log-file=FILENAME  セッションログをファイルに書き込む
  -n, --no-readline        拡張コマンドライン編集機能(readline)を無効にする
  -o, --output=FILENAME    問い合わせの結果をファイル (または |パイプ)に送る
  -q, --quiet              静かに実行 (メッセージなしで、問い合わせの出力のみ)
  -s, --single-step        シングルステップモード (各問い合わせごとに確認)
  -S, --single-line        単一行モード (行末でSQLコマンドを終端)

出力フォーマットのオプション
  -A, --no-align           桁揃えなしのテーブル出力モード
      --csv                CSV(カンマ区切り)テーブル出力モード
  -F, --field-separator=文字列
                           桁揃えなし出力時のフィールド区切り文字
                           (デフォルト: "|")
  -H, --html               HTML テーブル出力モード
  -P, --pset=変数[=値]     表示オプション '変数' を '値' にセット
                           (\pset コマンドを参照)
  -R, --record-separator=文字列
                           桁揃えなし出力におけるレコード区切り文字
                           (デフォルト: 改行)
  -t, --tuples-only        行のみを表示
  -T, --table-attr=TEXT    HTMLテーブルのタグ属性をセット (width, border等)
  -x, --expanded           拡張テーブル出力に切り替える
  -z, --field-separator-zero
                           桁揃えなし出力のフィールド区切りをバイト値の0に設定
  -0, --record-separator-zero
                           桁揃えなし出力のレコード区切りをバイト値の0に設定

接続オプション:
  -h, --host=HOSTNAME      データベースサーバのホストまたはソケットの
                           ディレクトリ(デフォルト: "/var/run/postgresql")
  -p, --port=PORT          データベースサーバのポート番号(デフォルト: "5432")
  -U, --username=USERNAME  データベースのユーザ名 (デフォルト: "***")
  -w, --no-password        パスワード入力を要求しない
  -W, --password           パスワードプロンプトの強制表示(本来は自動的に表示)

詳細はpsqlの中で"\?"(内部コマンドの場合)または"\help"(SQLコマンドの場合)
をタイプするか、またはPostgreSQLドキュメント中のpsqlのセクションを参照のこと。

バグは<pgsql-bugs@lists.postgresql.org>に報告してください。
PostgreSQL ホームページ: <https://www.postgresql.org/>

(2)データベース一覧の表示
 $ psql -l

(3)データベースの削除
 dropdb <データベース名>
(4)新しいデータベースを作成
 createdb <データベース名>
 $ createdb mydb

(5)データベースに接続
 psql -d <データベース名>
(例)
 $ psql -d mydb
 mydb=#
(6)テーブルの作成

mydb=# CREATE TABLE weather (
    city            varchar(80),

    temp_lo         int,           -- 最低気温
    temp_hi         int,           -- 最高気温
    prcp            real,          -- 降水量
    date            date
);

(7)テーブルリスト表示
 postgres=# SELECT * FROM weather;

(8)テーブル一覧の表示
 mydb=# \dt

(9)テーブルのスキーマの詳細表示
 mydb=# \d <テーブル名>

(10)テーブルのレコード追加
 mydb=# INSERT INTO weather VALUES (‘japan tokyo’, 32, 38, 0.50, ‘1998-12-10’);

(11)テーブルのレコード検索
 mydb=# SELECT * FROM weather;
 mydb=# SELECT * FROM weather WHERE city=’japan oosaka’;

(12)テーブルのアクセス権限の表示
 mydb=# \z <テーブル名>

(13)テーブルの削除
 mydb=# drop table <テーブル名>;

(14)PostgreSQLプロンプトの終了
 mydb=# \q

3.PostgresSQLのロールについて
 ロールは操作権限などの役割を示すものでPostgresSQLではユーザ管理はロールで行う。OS上のユーザーとは別に扱われ、OS上のユーザーとロールとの対応は、「pg_hba.conf」ファイルで設定されている。

(1)スーパーユーザpostgresでpsqlを起動して、postgresのDBにログインする
 $ psql -U postgres -d postgres
(2)ロール(user01)を作成する
 postgres=# CREATE ROLE user01;
(3)ログイン権限を与える
 postgres=# ALTER ROLE user01 LOGIN; 
(4)パスワードを設定する
 postgres=# ALTER ROLE user01 PASSWORD ‘1212’;
(5)ロールuser01でデータベースにアクセスする
 postgres@*-VirtualBox:~$ psql -U user01 -d postgres
 psql: エラー: FATAL: ユーザ”user01″で対向(peer)認証に失敗しました
※peer認証とは
 PostgreSQL内のユーザーとUNIXユーザで、ユーザー名が一致していれば認証情報なしでログインできる仕組みで、psql側でユーザーを作るときには同名のUNIXユーザーも追加する必要がある。ここでは、テスト用として認証方法を変更して進める。
pg_hba.confファイル
PostgreSQLに接続するクライアントの認証に関する設定を記述するファイル
$ cd /etc/postgresql/13/main
$ ls -al

/etc/postgresql/13/main# vi pg_hba.conf

(変更前)
# Database administrative login by Unix domain socket
local   all             postgres                                peer
# "local" is for Unix domain socket connections only
local   all             all                                     peer

※認証方式
trust:任意のロール名でパスワードなしで接続可能
md5:パスワード認証
peer:Peer認証
peerをtrustに変更

(変更後)
# Database administrative login by Unix domain socket
local   all             postgres                                trust
# "local" is for Unix domain socket connections only
local   all             all                                     trust

(6)user01でpostgresに接続する
 psql -h ホスト名 -p ポート番号 -U ロール名 -d データベース名
 $ psql -h localhost -p 5432 -U user01 -d postgres
 パスワードは前述で設定した’1212′

ホスト名:ローカルホストで動いている PostgreSQL に接続する場合は省略可
ポート番号:デフォルトの値(通常は 5432 )で別の番号を使用するとき以外は省略可
ロール名:省略した場合は OS のユーザー名が使用される

(7)ロール一覧
 =# \du

(8)コマンドプロンプト
 =# スーパーユーザpostgresからデータベースに接続したとき
 => スーパーユーザ以外からデータベースに接続したとき

# psql -U user01 -d mydb
 psql (13.3 (Ubuntu 13.3-1.pgdg16.04+1))
 "help"でヘルプを表示します。
 mydb=>

 # psql -U postgres -d mydb
 psql (13.3 (Ubuntu 13.3-1.pgdg16.04+1))
 "help"でヘルプを表示します。
 mydb=#

(9)SQLコマンドの分割入力
 SQLコマンドを実行するときは最後にセミコロン”;”を入力してから、[Enter]キーを押します。セミコロンが入力される前に[Enter]キーを押した場合は入力が分割されたものとして扱われ、コマンドプロンプトが”=#”(”=>”)から”-#”(”->”)に変わります。

4.PostgresSQLのスキーマについて
 スキーマとは、1つのデータベースの中に複数設定することができる名前空間で自由に定義できる。
(1)スキーマ作成
mydb=# create schema <スキーマ名>
(2)スキーマの確認
 mydb=# select current_schema;
(3)スキーマの一覧
 mydb=# \dn

(4)スキーマの変更
 mydb=# set search_path to <schema_name>;

5.PostgreSQLアンインストール
(1)パッケージリストの確認
 postgresqlのパッケージリストを確認
 $ dpkg -l | grep postgres

(2)Postgresパッケージの削除
 $ sudo apt remove –purge postgresql
 $ sudo apt remove –purge postgresql-13
 $ sudo apt remove –purge postgresql-client-13
 $ sudo apt remove –purge postgresql-client-common
 $ sudo apt remove –purge apostgresql-common
 すべて、y、または「はい」で続ける
(3)再起動
 $ shutdown -r now
(4)postgresユーザの削除
 $ sudo userdel postgres

 The end