はじめての自宅サーバ構築 - Fedora/CentOS -
Last Update 2017/02/18
[ 更新履歴 ] [ サイト マップ ] [ 質問掲示板 ] [ 雑談掲示板 ] [ リンク ]
トップ >> データベースサーバ >> データベースサーバの構築(PostgreSQL)
動作確認 [ Fedora15 / Fedora16 / Fedora17 / CentOS5 / CentOS6 ]
  1. PostgreSQLとは・・・
  2. PostgreSQLのインストール
  3. PostgreSQLのデータベース初期化
  4. PostgreSQLの起動
  5. データベースを操作してみる
    テーブル/カラムの作成
    レコードの挿入
    レコードの削除
    レコードの更新
  6. クライアント(Windows)からデータベースをGUIで操作する
    クライアントから接続できるように設定
    pgAdminのインストール
    pgAdminの設定
  7. PostgreSQLの初期設定
  8. パスワードを設定する
  9. データベースのバックアップとリストア

■ PostgreSQLとは・・・

PostgreSQLとはフリーで利用できるオープンソースのオブジェクトリレーショナルデータベース管理システム(ORDBMS)です。
近年では商用で利用される事が多くなり、性能や信頼性についても商用システムとほとんど変わらないと言われているそうです。

■ PostgreSQLのインストール

# yum -y install postgresql-server

■ PostgreSQLのデータベース初期化

既存データベース削除
# rm -rf /var/lib/pgsql/data/*


PostgreSQLの実行ユーザでデータベース初期化
# su - postgres -c "/usr/bin/initdb"
データベースシステム内のファイルの所有者は"postgres"ユーザでした。
このユーザがサーバプロセスを所有しなければなりません。

データベースクラスタはロケールja_JP.UTF-8で初期化されます。
デフォルトのデータベース符号化方式はUTF8に設定されました。
initdb: ロケール"ja_JP.UTF-8"用の適切なテキスト検索設定が見つかりません
デフォルトのテキスト検索設定はsimpleに設定されました。

ディレクトリ/var/lib/pgsql/dataの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 32MB
設定ファイルを作成しています ... ok
/var/lib/pgsql/data/base/1にtemplate1データベースを作成しています ... ok
pg_authidを初期化しています ... ok
依存関係を初期化しています ... ok
システムビューを作成しています ... ok
システムオブジェクトの定義をロードしています ... ok
変換を作成しています ... ok
ディレクトリを作成しています ... ok
組み込みオブジェクトに権限を設定しています ... ok
情報スキーマを作成しています ... ok
template1データベースをバキュームしています ... ok
template1からtemplate0へコピーしています ... ok
template1からpostgresへコピーしています ... ok

警告: ローカル接続向けに"trust"認証が有効です。
pg_hba.confを編集する、もしくは、次回initdbを実行する時に-Aオプショ
ンを使用することで変更することができます。

成功しました。以下を使用してデータベースサーバを起動することができます。

    /usr/bin/postgres -D /var/lib/pgsql/data
または
    /usr/bin/pg_ctl -D /var/lib/pgsql/data -l logfile start

■ PostgreSQLの起動

PostgreSQLの起動
【Fedora15 / CentOS5 / CentOS6 の場合】
# /etc/rc.d/init.d/postgresql start
【Fedora16以降 の場合】
# systemctl start postgresql.service

OS起動時にPostgreSQLを起動する
【Fedora15 / CentOS5 / CentOS6 の場合】
# chkconfig postgresql on
【Fedora16以降 の場合】
# systemctl enable postgresql.service

■ データベースを操作してみる

対話型の PostgreSQL 操作ツール(psql)の実行
データベースの所有者が postgres の為、このユーザで操作(接続)します
# psql --username=postgres
psql (8.4.9)
"help" でヘルプを表示します.

既存のデータベース一覧表示
postgres=# \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
(3 行)

「meibo」データベースを作成
postgres=# CREATE DATABASE meibo;
CREATE DATABASE

データベースの表示
postgres=# \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 meibo     | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
(4 行)
「meibo」データベースが作成された


「meibo」データベースに接続
postgres=# \c meibo
psql (8.4.9)
データベース "meibo" に接続しました。.
meibo=#
上記プロンプトに接続したデータベース名になっている事


「meibo」データベースに「users」テーブルを作成 (この時、「Num」と「Name」カラムを作成する)
meibo=# CREATE SEQUENCE public.users_seq;

meibo=# CREATE TABLE users (
meibo(# Num integer DEFAULT NEXTVAL('public.users_seq'),
meibo(# Name character(32) NOT NULL,
meibo(# CONSTRAINT users_pkey PRIMARY KEY (num)
meibo(# );
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"users"に暗黙的なインデックス"users_pkey"を作成します
CREATE TABLE

テーブルを表示
meibo=# \d
              リレーションの一覧
 スキーマ |   名前    |     型     |  所有者
----------+-----------+------------+----------
 public   | users     | テーブル   | postgres
 public   | users_seq | シーケンス | postgres
(2 行)

カラム表示
meibo=# select column_name,data_type from information_schema.columns where table_catalog='meibo' and table_name='users';
 column_name | data_type
-------------+-----------
 num         | integer
 name        | character
(2 行)
「users」テーブルが作成され、指定したカラムも作成された


レコードの挿入(値を"linux"にする)
meibo=# insert into public.users (Name) values('linux');
INSERT 0 1

レコードの表示
meibo=# select * from public.users;
 num |               name
-----+----------------------------------
   1 | linux
(1 行)
"linux"のレコードが登録された

レコードの挿入(値を"hogehoge"にする)
meibo=# insert into public.users (Name) values('hogehoge');
INSERT 0 1

レコードの表示
meibo=# select * from public.users;
 num |               name
-----+----------------------------------
   1 | linux
   2 | hogehoge
(2 行)
"hogehoge"のレコードが登録された


レコードの削除(キー「Num」が2のレコードを削除)
meibo=# delete from public.users where Num=2;
DELETE 1

レコードの表示
meibo=# select * from public.users;
 num |               name
-----+----------------------------------
   1 | linux
(1 行)
"hogehoge"のレコードが削除された


再度、レコードの挿入(値を"hogehoge"にする)
meibo=# insert into public.users (Name) values('hogehoge');
INSERT 0 1

レコードの表示
meibo=# select * from public.users;
 num |               name
-----+----------------------------------
   1 | linux
   3 | hogehoge
(2 行)
"hogehoge"のレコードが登録された


レコードの更新(「Name」が"hogehoge"のレコードを"fedora"に変更)
meibo=# update public.users set Name='fedora' where Name='hogehoge';
UPDATE 1

レコードの表示
meibo=# select * from public.users;
 num |               name
-----+----------------------------------
   1 | linux
   3 | fedora
(2 行)
"hogehoge"のレコードが"fedora"に変更された

psqlの終了
meibo=# \q

■ クライアント(Windows)からデータベースをGUIで操作する

データベースの中身を確認したり更新・削除などGUI(グラフィカルユーザインタフェース)で操作できる pgAdmin をクライアント(Windows)にインストールしてサーバのデータベースに接続する方法を以下に紹介します。

■ クライアントから接続できるように設定

PostgreSQLの停止(サービスが起動していれば・・)
【Fedora15 / CentOS5 / CentOS6 の場合】
# /etc/rc.d/init.d/postgresql stop
【Fedora16以降 の場合】
# systemctl stop postgresql.service

サービスへの接続と接続できるネットワークを追加
# vi /var/lib/pgsql/data/postgresql.conf
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'    # what IP address(es) to listen on;
          # comma-separated list of addresses;
          # defaults to 'localhost', '*' = all
          # (change requires restart)

# vi /var/lib/pgsql/data/pg_hba.conf
最終行に以下を追加
# my network connections:
host    all         all         192.168.1.0/24        trust

ネットワーク部は自身の環境に合わせてください。
パスワードを設定している場合(以下、パスワードを設定するを参照)は「trust」を「md5」に変更して下さい。

■ pgAdminのインストール

pgAdminを操作するクライアント(Windows)にダウンロードします。(2012年01月25日時点での最新バージョンは v1.14.1 となっています)
ダウンロードしたファイル(pgadmin3-1.14.1.zip)は圧縮ファイルとなっていますので、予め解凍しておいてください。

  1. 解凍した「pgadmin3.msi」を実行

    • 「Next」をクリックします
  2. 使用承諾の同意

    • I accept the terms in the License Agreement
    • 上記にチェックして「Next」をクリックします
  3. インストール先と導入ツールの選択

    • 「Next」をクリックします
  4. インストールの確認

    • 「Install」をクリックします
  5. インストール完了

    • 「Finish」をクリックして終了します

■ pgAdminの設定

  1. サーバの登録

    • 「ファイル(F)」→「サーバの追加」またはアイコンをクリック
  2. サーバの登録設定

    • 「名前」任意名
    • 「ホスト」サーバのIPアドレス(名前解決できていればホスト名)
    • 「パスワード」パスワードを設定している場合のみ
  3. サーバへの接続

    • 左ペイン内の登録したサーバをダブルクリック

【その他】

■ パスワードを設定する

postgres にはパスワードが設定されていませんので、必要であれば下記を実施する事でパスワードを設定する事ができます

対話型の PostgreSQL 操作ツール(psql)の実行
# psql --username=postgres
psql (8.4.9)
"help" でヘルプを表示します.

現状のパスワード確認
postgres=# select usename,passwd from pg_shadow;
 usename  | passwd
----------+--------
 postgres |
(1 行)
上記の様にパスワードが設定されていません


ユーザ「postgres」のパスワードを「himitsu」に設定
postgres=# alter user postgres with password 'himitsu';
ALTER ROLE

パスワード確認
postgres=# select usename,passwd from pg_shadow;
 usename  |               passwd
----------+-------------------------------------
 postgres | md56dd02212eb5f143f340b57191cdb993c
(1 行)


psqlの終了
meibo=# \q


PostgreSQLの停止
【Fedora15 / CentOS5 / CentOS6 の場合】
# /etc/rc.d/init.d/postgresql stop
【Fedora16以降 の場合】
# systemctl stop postgresql.service


設定ファイルの変更
# vi /var/lib/pgsql/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local   all         all                               md5
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5


PostgreSQLの起動
【Fedora15 / CentOS5 / CentOS6 の場合】
# /etc/rc.d/init.d/postgresql start
【Fedora16以降 の場合】
# systemctl start postgresql.service


パスワードが有効になったか確認
# psql --username=postgres
ユーザ postgres のパスワード:
上記の様にパスワード入力が求められ、正しいパスワード入力後下記の様に接続できます
psql (8.4.9)
"help" でヘルプを表示します.

postgres=#

■ データベースのバックアップとリストア

データベースのバックアップはPostgreSQLサービスが稼働した状態でバックアップする事が可能です。
またPostgreSQLのユーティリティ「pg_dumpall」を使用する事によりデータベースをスクリプト(ダンプ)ファイルに出力します。
このスクリプト(ダンプ)ファイルには、データベースユーザとグループ、データベース全体に適用するアクセス制限に関する情報が含まれ容易にリストア(復元)する事ができます。

バックアップ方法
# /usr/bin/pg_dumpall -U postgres -c > /tmp/PostgreDump
「/tmp」に「PostgreDump」と言うファイル名で作成されます
上記コマンドをcronに登録して定期的にバックアップした方が良いでしょう。


リストア方法
PostgreSQlサービスが稼働中の場合は停止
【Fedora15 / CentOS5 / CentOS6 の場合】
# /etc/rc.d/init.d/postgresql stop
【Fedora16以降 の場合】
# systemctl stop postgresql.service

PostgreSQLのデータベース初期化』を実施して初期データベースを作成
データベース作成後、PostgreSQLサービスの開始
【Fedora15 / CentOS5 / CentOS6 の場合】
# /etc/rc.d/init.d/postgresql start
【Fedora16以降 の場合】
# systemctl start postgresql.service

スクリプト(ダンプ)ファイルよりリストア
# /usr/bin/psql -U postgres -d template1 < /tmp/PostgreDump

■ コンテンツ関連

■ 関連書籍など

■ その他

ページ先頭へ

Copyright(©)2004-2017 First home server construction. All Right Reserved.