PostgreSQL
PostgreSQL のコマンドを使用する場合のユーザは、-U オプションを使って明示的に指定しないかぎり、OS のログインしているユーザと同じ名前のものが使用される。
データベースの作成
$ createdb mydb
例
code:_
$ sudo -u postgres bash
$ createdb --encoding=SQL_ASCII --locale=C --template=template0 foo
$ createuser www
$ createuser www-data
$ psql -f /vagrant/foo.dump foo
template0 と template1 があり、CREATE DATABASE は template1 を元にデータベースを作成する。
データベースの削除
削除しようとしているデータベースの所有者とスーパーユーザのみ実行可能。
削除しようとしているデータベースに接続している時にはDROP DATABASEを実行することはできない。別のデータベースへ接続する必要がある。
$ dropdb mydb
データベースの一覧
$ psql -l
mydb=# \l
データベースへ接続
$ psql mydb
データベース名を省略するとユーザ名と同じものが指定されたことになる。
テーブルの一覧
mydb=# \dt
テーブルの定義の表示
MySQL の desc と同じようなもの。
mydb=# \d weather
ロール (ユーザ?) の一覧
mydb=# \du
SELECT * FROM pg_roles;
バックアップとリストア
MySQL の \G 相当のこと
\x でフォーマットを切り替えられる
コマンドの履歴を残したくない
.psqlrc で \set HISTCONTROL ignorespace と設定するとスペースで始まるコマンドは履歴に記録されない。あるいは、\set HISTFILE /dev/null を設定すればすべてのコマンドが履歴に残らないようになる。
--no-readline オプションを使っても履歴が残らないようにできるが、readline の機能が使えなくなるので不便。
テーブルを空にしたい
TRUNCATE TABLE table_name;
オートインクリメントな ID を1から振りなおしたい場合
TRUNCATE TABLE table_name RESTART IDENTITY;
CUI クライアント
psql
pgcli
GUI クライアント
PSequel
MySQL の GUI クライアント Sequel Pro と似たようなかんじできれい。
ただ EUC-JP な文字列が unreadable data となって読むことができず、エンコーディングの設定も変えられそうにない。おしい。
Postico
モダンな UI。これも EUC-JP な文字列が文字化けしていて読むことができず、エンコーディングの設定もなさそう。
pgAdmin
pgAdmin 4 は、SSH Tunnel の設定がない…?