psql は,PostgreSQL に関する各種操作を,簡単に行えるツール.
Windows については,別ページ »で説明
【目次】
【サイト内の主な PostgreSQL 関連ページ】
【関連する外部ページ】
Ubuntu のサービスアカウント postgres と peer 認証により,PostgreSQL の psql を使ってみる.
sudo -u postgres psql
\c
データベースが表示されることを確認.
\l
\c \du
次のように,ロールを新規作成し,PostgreSQL データベース管理者権限の付与を行う.
* 説明上,単純に hoge$#34hoge5 と書いているが,必ず,これとは違う適切なパスワードを設定すること)
【関連する外部ページ】 https://www.postgresql.org/docs/12/sql-createrole.html
create role testuser with superuser createdb createrole login encrypted password 'hoge$#34hoge5'; \du \q
psql -U testuser -d postgres \q
Ubuntu での追加設定
全ユーザ の md5 認証を有効にする.
/etc/postgresql/12/main/pg_hba.conf を書き換えて,全ユーザである all の md5 認証を有効にする.
そのために,次の1行を追加する
local all all md5
上の設定を行わないと,「Peer authentication failed...」というメッセージが出る.このメッセージから,md5 認証ができていないことになる.
エラーメッセージが出ていないことを確認すること.
sudo pg_ctlcluster 12 main restart sudo pg_ctlcluster 12 main status
確認のため,いま作成したロールで,psql を起動してみる. その後「\c」で,現在使用中のデータベース名とロール名の確認を行う. 使用するデータベース名としては,「-d postgres」で,postgres を指定する.
psql -U testuser -d postgres \c \q
ロールを削除したいときは,psql で,「drop role testuser;」のように操作する.
psql で次のように操作する.「\db+」はテーブル空間の一覧.
\db+
Ubuntu で次のように,テーブル空間を新規作成する.
次のように操作する.「sudo chown -R postgres /var/sqltable1」のpostgresは, Ubuntu のサービスアカウント名
sudo mkdir /var/sqltable1 sudo chown -R postgres /var/sqltable1 sudo chmod 700 /var/sqltable1 psql -U testuser -d postgres create tablespace mytablespace owner testuser location '/var/sqltable1'; \q
psql -U testuser -d postgres \db+ \q
表示が空のときは,「pg_default」
show default_tablespace;
この設定は,psql の終了により消えるものである.
show default_tablespace; set default_tablespace to mytablespace; show default_tablespace;
【関連する外部ページ】 https://www.postgresql.jp/document/12/html/manage-ag-tablespaces.html
show temp_tablespaces;
「set temp_tablespaces to ・・・;」により,テンポラリテーブルが作成されるテーブル空間を変更している. 「show temp_tablespaces;」により確認している.
この設定は,psql の終了により消えるものである.
set temp_tablespaces to mytablespace; show temp_tablespaces;
「\l+」ですべてのデータベースの詳細情報を確認.
\l+
【関連する外部ページ】 https://www.postgresql.jp/document/12/html/manage-ag-createdb.html
次のように,データベースを新規作成する.
psql で次のように操作する.
create database mydb owner testuser tablespace mytablespace encoding 'UTF8';
「-d mydb」で,いま新規作成したデータベース名を指定. 「\l+」ですべてのデータベースの詳細情報を確認.
psql -U testuser -d mydb \l+
「\c」は,現在使用中のデータベース名とロール名の確認.
\c
「\c mydb」は,使用するデータベースを mydb に変更.
\c \c mydb \c
「\dn+」はすべてのスキーマの詳細情報の表示.
\dn+
次のように,スキーマを新規作成する.
次のように操作する.
create schema myschema;
「\dn+」ですべてのスキーマの詳細情報を確認.
\dn+
「show search_path;」は,カレントスキーマの表示.
show search_path;
「
「show search_path;」は,カレントスキーマの表示.
この設定は,psql の終了により消えるものである.
$HOME/.bashrc に,次のような 2行を追記する.
その後「source $HOME/.bashrc」を実行
ファイル $HOME/.psqlrc に,次のような 3行を追記する.
(ファイル $HOME/.psqlrc がなければ新規作成する)
「\dt+」は,すべてのテーブルの詳細情報を表示する.
期待される結果.
以下は,動作画面.
データベースの一覧表示は,「psql -U testuser -l」でも行うことができる.
psql の起動において,「-L <ファイル名>」を付ける.
psql の起動において,「-f <ファイル名>」を付ける.
テーブルのインポート,エクスポートには,PostgreSQL の copy コマンドを使う.
Windows マシンでファイルを使う場合には,2つ注意点がある.
* バックスラッシュを使いたいので,エスケープ文字列であることを意味する「E」を,文字列の前につける.
* バックスラッシュを使いたいので,エスケープ文字列であることを意味する「E」を,文字列の前につける.
出力先によっては,書き込みができず(書き込み権限がないために),
「ERROR: could not open file ... for writing: Permission denied」というエラーが出て動かない場合があるので注意.
show search_path;
set search_path to myschema;
show search_path;
8. 既定(デフォルト)で使用するロール名とデータベース名,既定(デフォルト)で使用するテーブル空間,テンポラリテーブルが作成されるテーブル空間,カレントスキーマの設定
export PGDATABASE=mydb
export PGUSER=testuser
set default_tablespace to mytablespace;
set temp_tablespaces to mytablespace;
set search_path to myschema;
9. SQL の実行,SQL 実行結果のファイル出力
テーブル定義とレコード挿入
create table commodity (
type integer primary key not null,
name text not null,
price integer);
insert into commodity values( 1, 'apple', 50 );
insert into commodity values( 2, 'orange', 20 );
insert into commodity values( 3, 'strawberry', 100 );
insert into commodity values( 4, 'watermelon', 150 );
insert into commodity values( 5, 'melon', 200 );
insert into commodity values( 6, 'banana', 100 );
\dt+
SQL 問い合わせ
select * from commodity;
TYPE NAME PRICE
---- ---------- -----
1 apple 50
2 orange 20
3 strawberry 100
4 watermelon 150
5 melon 200
6 banana 100
10. psql のオプション
データベースの一覧表示
SQL 実行結果のファイル出力
ファイルに入った SQL の実行
11. テーブルのインポート,エクスポート
copy WORK from E'd:\\KEN_ALL_UTF8.csv' with csv;
copy ZIP2 to E'C:\\data\\zip.csv' with CSV;