メモ > サーバ > 構築: Webサーバ設定 > PostgreSQL
PostgreSQL
※データベースPostgreSQLを導入する
■インストール
yumによるRPMパッケージのアンインストール
http://fedorasrv.com/memo/log/37.shtml
PostgreSQL インストール
http://www.server-world.info/query?os=CentOS_6&p=postgresql
PostgreSQL 9.3をCentOS 6.5へインストールして初期設定
http://ossfan.net/setup/postgresql-20.html
データベースサーバの構築(PostgreSQL)
http://kajuhome.com/postgresql.shtml
CentOSでPostgreSQL!一般ユーザ用のDBを作って操作する方法!
http://senoway.hatenablog.com/entry/2013/09/21/231706
# rpm -q postgresql … 古いPostgreSQLを削除する場合
postgresql-8.4.20-1.el6_5.x86_64
# yum remove postgresql
# yum -y install postgresql-server … postgresql-serverをインストール
# service postgresql initdb … データベース初期化
データベースを初期化中: [ OK ]
# vi /var/lib/pgsql/data/postgresql.conf … PostgreSQLの設定ファイルを編集
■動作確認
※OSのユーザとPostgreSQLのユーザが一致している必要があるため、あらかじめOSのユーザを作成しておく
# 59行目:コメント解除して変更(他ホストからのアクセスも受け付ける場合)
listen_addresses = '*'
# 334行目:コメント解除して変更(ログの形式を [日時 ユーザー DB 〜]とする)
log_line_prefix = '%t %u %d '
# service postgresql start … PostgreSQL起動
postgresql サービスを開始中: [ OK ]
# chkconfig postgresql on … PostgreSQL自動起動設定
# useradd webmaster … 一般ユーザ「webmaster」を作成(作成していない場合)
# passwd webmaster … 「webmaster」のパスワードを設定(作成していない場合)
※引き続き、PostgreSQLのユーザとデータベースを作成
# su - postgres … postgres ユーザーにスイッチしてパスワード設定
(postgresユーザはPostgreSQLインストール時に自動的に作成される)
-bash-4.1$ psql -c "ALTER USER postgres WITH PASSWORD '1234'"
ALTER ROLE
-bash-4.1$ createuser webmaster … DBユーザー「webmaster」を新規登録
Shall the new role be a superuser? (y/n) y … DBの管理者権限を与える場合は「y」
-bash-4.2$ createdb test … testデータベースを作成
※作成したユーザで接続テスト
# su - webmaster … webmasterユーザに切り替え
$ psql -l … データベース作成確認
$ psql test … testデータベースに接続
psql (8.4.20)
"help" でヘルプを表示します.
test=# ALTER USER webmaster WITH PASSWORD '1234'; … ユーザにパスワードを設定
ALTER ROLE
test=# CREATE TABLE test(no INT, name TEXT); … テーブルを作成&テスト
CREATE TABLE
test=> INSERT INTO test VALUES(1, '山田太郎');
INSERT 0 1
test=> INSERT INTO test VALUES(2, '山田花子');
INSERT 0 1
test=# SELECT * FROM test;
no | name
----+----------
1 | 山田太郎
(1 行)
test=# DROP TABLE test; … テスト用のテーブルを削除する場合
DROP TABLE
test=# \q … ログアウト
■PHPから接続
※設定しないと、PHPから接続した時に「Ident認証に失敗しました」となる
「Linux上のアカウントとPostgreSQLのアカウントが一致しないとエラーにする」という設定で、あらかじめ設定されているもの
PHPはapache権限で実行されるため、ユーザが異なるとみなされる
CentOS で PostgreSQL を使ってみよう!(2)
http://lets.postgresql.jp/documents/tutorial/centos/2
# vi /var/lib/pgsql/data/pg_hba.conf … クライアント認証ファイルを編集
※スロークエリの設定も行っておく。次回設定時に追記する
■PHPから接続テスト
# "local" is for Unix domain socket connections only … 丸ごとコメントアウト
#local all all ident
# IPv4 local connections:
#host all all 127.0.0.1/32 ident
# IPv6 local connections:
#host all all ::1/128 ident
local all all trust … 代わりに以下の設定を追加
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
host all all 0.0.0.0/0 password
# vi /var/www/html/pgsql.php
■EUC_JPのデータベースを作成
<?php
try {
$pdo = new PDO(
'pgsql:dbname=test;host=localhost',
'webmaster',
'1234'
);
$stmt = $pdo->query('SELECT NOW() AS now;');
$data = $stmt->fetch(PDO::FETCH_ASSOC);
echo "<p>" . $data['now'] . "</p>\n";
$pdo = null;
} catch (PDOException $e) {
exit($e->getMessage());
}
psql -l … データベースの文字コードを確認
dropdb test … 一旦testデータベースを削除する場合
createdb -E EUC_JP --locale=ja_JP.EUC_JP test --template=template0 … 文字コードを指定してtestデータベースを作成
PostgreSQLのinitdbと違うロケールでDB作成
http://wsjp.blogspot.jp/2012/04/postgresqlinitdbdb.html
PostgreSQLエラー「createdb: データベースの生成に失敗しました: ERROR: 符号化方式 EUC_JP がロケール ja_JP.UTF-8 に合いません」の原因と解決方法
http://nobuneko.com/blog/archives/2011/10/postgresqlcreatedb_error_euc_j.html
以下、「他にこのデータベースを使っている 1 個のセッションがあります。」のように表示された場合の対象方法
アクセスしているユーザを調べて強制的に追い出す
psql test … testデータベースに接続
SELECT * FROM pg_stat_activity; … アクセスしているユーザを調べる
SELECT pg_terminate_backend(567) FROM pg_stat_activity WHERE usename = 'usename'; … procidとusernameを指定して追い出す
\q … ログアウト
具体例
SELECT pg_terminate_backend(7960) FROM pg_stat_activity WHERE usename = 'postgres';
SELECT pg_terminate_backend(5484) FROM pg_stat_activity WHERE usename = 'postgres';
SELECT pg_terminate_backend(7404) FROM pg_stat_activity WHERE usename = 'postgres';
「WHERE usename = 'postgres'」は無くても大丈夫かも?