Memo

メモ > サーバ > 構築: 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の設定ファイルを編集
# 59行目:コメント解除して変更(他ホストからのアクセスも受け付ける場合) listen_addresses = '*' # 334行目:コメント解除して変更(ログの形式を [日時 ユーザー DB 〜]とする) log_line_prefix = '%t %u %d '
# service postgresql start … PostgreSQL起動 postgresql サービスを開始中: [ OK ] # chkconfig postgresql on … PostgreSQL自動起動設定
■動作確認 ※OSのユーザとPostgreSQLのユーザが一致している必要があるため、あらかじめOSのユーザを作成しておく
# 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 … クライアント認証ファイルを編集
# "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
※スロークエリの設定も行っておく。次回設定時に追記する ■PHPから接続テスト
# vi /var/www/html/pgsql.php
<?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()); }
■EUC_JPのデータベースを作成
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'」は無くても大丈夫かも?

Advertisement