MySQL使いのためのPostgreSQL入門
投稿者 おおかゆか
ここ数年DBといえばMySQLしか使っておらず、PostgreSQLに最後に触ったのは8年くらい前のバージョン7の頃だったか。
現在の最新版バージョンは8.3でパフォーマンスも大幅に向上してMySQLをしのぐほどになり、またVACUUMの問題もおおむね解決された様子なので、また使ってみようかという気になった。
以前触ったことがあるといっても昔過ぎてさっぱり憶えておらず、MySQLのやり方が染み付いてしまっているので、リファレンスを見ながらやってもどうも思うようにいかずストレスが溜まる。
MySQLならこうやるところをPostgreSQLならこうやる、みたいな整合表があれば便利なのにと思って探してみたが、そのようなサイトはついぞ見つからなかった。ならば自分で作ってしまえと勢いで作ってみた。
ちなみにインストール方法やファイルの場所等は、Ubuntuでaptパッケージからインストールした場合のもので、他のOSやディストリビューションでは異なる場合もあるためあらかじめ断っておく。
なお書式は、
my) MySQLでのやり方
pg) PostgreSQLでのやり方
となっている。
インストール
$ sudo apt-get install postgresql
$ sudo passwd postgres
新しいUNIXパスワードを入力してください:
新しいUNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました
$ createuser -P USER_NAME
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) y
データベースの作成/削除
my) $ mysqladmin create DB_NAME
pg) $ createdb DB_NAME
my) $ mysqladmin drop DB_NAME
pg) $ dropdb DB_NAME DBユーザーの作成/削除
my) mysql> grant PRIVILEGES on DB_NAME to USER_NAME identified by 'PASSWORD';
pg) $ createuser -P USER_NAME
my) mysql> drop user UESR_NAME;
pg) $ dropuser USER_NAME 起動/停止
my) $ mysqld_multi start|stop
pg) $ pg_ctlcluster 8.3 main start|stop|restart
my) $ /etc/init.d/mysql start|stop|restart
pg) $ /etc/init.d/postgresql-8.3 start|stop|restart 対話型インターフェース
my) $ mysql [-u USER_NAME -pPASSWORD -h HOST_NAME -P PORT DB_NAME]
pg) $ psql [-U USER_NAME -W PASSWORD -h HOST_NAME -p PORT DB_NAME]※mysqlはDB名を指定しなくても接続できるが、psqlはDB名を省略するとユーザ名と同じデータベースに接続しようとする。DB名は「psql -l」で一覧表示できる。
mysql> exit|quit|q
postgres=# q
mysql> use DB_NAME
postgres=# c|connect DB_NAME
mysql> show databases;
postgres=# l|list
mysql> show tables;
postgres=# dt
mysql> show index from TABLE_NAME;
postgres=# di
mysql> desc TABLE_NAME;
postgres=# d TABLE_NAME
mysql> load data infile 'FILE_NAME' into table TABLE_NAME;
postgres=# copy TABLE_NAME from FILE_NAME
mysql> select * from TABLE into outfile 'FILE_NAME';
postgres=# copy TABLE_NAME to FILE_NAMEDBダンプ
my) $ mysqldump [--add-drop-table --nodata]
pg) $ pg_dump [-c|--clean -s|--schema-only]設定ファイル
my) /etc/mysql/my.cnf
pg) /etc/postgresql/8.3/main/postgresql.conf
データ格納場所
my) /var/lib/mysql/
pg) /var/lib/postgresql/8.3/main/
管理用DB
my) mysql
pg) どのDBからもアクセスできる管理用テーブル群。pg_roles, pg_users, pg_database等がある
アクセス制御
my) mysqlデータベースのhost, db, userテーブル
pg) /etc/postgresql/8.3/main/pg_hba.conf
レプリケーション
my) 標準装備
pg) pgpool、PGCluster等を使う
デフォルトポート
my) 3306
pg) 5432


















