Ubuntu10.10 自宅サーバ構築手順:DB実行環境(PostgreSQL)インストール

代表的なDB環境の中で確立出来ていなかったうちの1つ、PostgreSQLもようやくインストールまで漕ぎ着ける事が出来ました。これでOracle/MySQL/PostgreSQLと揃いました。


  • apt-getコマンドでインストール実施。
absj31@absj31-MyHomeServer:~$ sudo apt-get install -y postgresql postgresql-client postgresql-contrib
absj31@absj31-MyHomeServer:~$ sudo apt-get install pgadmin3
  • PostgreSQLのrootユーザ(postgres)パスワードを変更(DB側)。
absj31@absj31-MyHomeServer:~$ sudo su postgres -c psql template1
psql (8.4.6)
"help" でヘルプを表示します.

postgres=# ALTER USER postgres WITH PASSWORD '(変更パスワード)';
ALTER ROLE
postgres=# \q
absj31@absj31-MyHomeServer:~$ 
  • PostgreSQLのrootユーザ(postgres)パスワードを変更(OS側)。
absj31@absj31-MyHomeServer:~$ sudo passwd -d postgres
passwd: password expiry information changed.
absj31@absj31-MyHomeServer:~$ sudo su postgres -c passwd
新しいUNIXパスワードを入力してください: (パスワード入力)
新しいUNIX パスワードを再入力してください: (パスワード入力)
passwd: パスワードは正しく更新されました
absj31@absj31-MyHomeServer:~$ 
  • 設定反映。
absj31@absj31-MyHomeServer:~$ sudo su postgres -c psql < /usr/share/postgresql/8.4/contrib/adminpack.sql
  • リモートアクセス対応を行う。まずはpostgresユーザから。postgresql.confを編集。
absj31@absj31-MyHomeServer:~$ sudo vi /etc/postgresql/8.4/main/postgresql.conf
-----------------
(以下の行を以下の内容に変更)
listen_addresses = '*'
password_encryption = on
-----------------
  • postgresユーザで接続確認。この時点でログインを試みると、以下のエラーになる(はず)。
absj31@absj31-MyHomeServer:~$ psql -d postgres -U postgres -W
ユーザ postgres のパスワード: 
psql: FATAL:  ???"postgres"?Ident?????????
absj31@absj31-MyHomeServer:~$ 
  • ファイルを編集。postgresユーザのみの対処だけなら、以下に記した行のみの変更で繋がるは繋がった。
absj31@absj31-MyHomeServer:~$ sudo vi /etc/postgresql/8.4/main/pg_hba.conf
------------------
local   all         postgres                          trust 【←trustに変更】
  • 接続確認(postgres)。
absj31@absj31-MyHomeServer:~$ psql -U postgres -W
ユーザ postgres のパスワード: 
psql (8.4.6)
"help" でヘルプを表示します.

postgres=# 
  • DB接続用のユーザを作成。pgsqluser/pgsqlpass で接続する事を想定した内容で進める。まずはGUIベースでUbuntu10 OSユーザ及びパスワードを設定。[システム]→[システム管理]→[ユーザとグループ]を選択。ユーザ[pgsqluser]を作成、パスワードに[pgsqlpass]を設定。
  • 端末ログイン後、postgresユーザに権限変更。
absj31@absj31-MyHomeServer:~$ su postgres
パスワード: 
postgres@absj31-MyHomeServer:/home/absj31$ 
  • postgreSQL上で利用するユーザ[pgsqluser]を作成。
postgres@absj31-MyHomeServer:/home/absj31$ createuser -AdPE pgsqluser
新しいロールのパスワード: 
もう一度入力してください: 
新しいロールにロールを作成する権限を与えますか? (y/n) y
postgres@absj31-MyHomeServer:/home/absj31$ 
  • 作成したユーザ[pgsqluser]に権限変更。
postgres@absj31-MyHomeServer:/home/absj31$ su pgsqluser
パスワード: 
pgsqluser@absj31-MyHomeServer:/home/absj31$ 
  • DB作成。ここでは[ubuntu10pgsqldb]とした。
pgsqluser@absj31-MyHomeServer:/home/absj31$ createdb -E UTF8 -U pgsqluser -W ubuntu10pgsqldb
パスワード: 
pgsqluser@absj31-MyHomeServer:/home/absj31$ 
pgsqluser@absj31-MyHomeServer:/home/absj31$ psql -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
 ubuntu10pgsqldb | pgsqluser | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
(4 行)

pgsqluser@absj31-MyHomeServer:/home/absj31$ 
  • テーブル作成及びデータ投入。事前にSQLファイルを作成し、Ubuntu10サーバにアップロードしておく。

create_mst_pref.sql 直
insert_mst_pref.sql 直

pgsqluser@absj31-MyHomeServer:/home/absj31$ psql ubuntu10pgsqldb
psql (8.4.6)
"help" でヘルプを表示します.

ubuntu10pgsqldb=> \i /home/absj31/create_mst_pref.sql
psql:/home/absj31/create_mst_pref.sql:1: NOTICE:  CREATE TABLE / UNIQUEはテーブル"mst_pref"に暗黙的なインデックス"mst_pref_pref_code_key"を作成します
CREATE TABLE
ubuntu10pgsqldb=> \i /home/absj31/insert_mst_pref.sql
DELETE 0
psql:/home/absj31/insert_mst_pref.sql:2: WARNING:  進行中のトランザクションがありません
COMMIT
INSERT 0 1
INSERT 0 1
:
:
INSERT 0 1
INSERT 0 1
psql:/home/absj31/insert_mst_pref.sql:50: WARNING:  進行中のトランザクションがありません
COMMIT
ubuntu10pgsqldb=> 
ubuntu10pgsqldb=> \d mst_pref
         テーブル "public.mst_pref"
   カラム   |          型           | 修飾語 
------------+-----------------------+--------
 pref_code  | character(2)          | 
 pref_name  | character varying(20) | 
 pref_cap   | character varying(20) | 
 population | integer               | 
インデックス:
    "mst_pref_pref_code_key" UNIQUE, btree (pref_code)

ubuntu10pgsqldb=> 

ubuntu10pgsqldb=> select * from mst_pref;

 pref_code | pref_name |   pref_cap   | population 
-----------+-----------+--------------+------------
 01        | 北海道    | 札幌市       |    5644504
 02        | 青森県    | 青森市       |    1452977
 03        | 岩手県    | 盛岡市       |    1396005
 04        | 宮城県    | 仙台市       |    2369489
 05        | 秋田県    | 秋田市       |    1161298
 06        | 山形県    | 山形市       |    1224811
 07        | 福島県    | 福島市       |    2106232
 08        | 茨城県    | 水戸市       |    2991976
 09        | 栃木県    | 宇都宮市     |    2012585
 10        | 群馬県    | 前橋市       |    2034368
 11        | 埼玉県    | さいたま市   |    7057365
 12        | 千葉県    | 千葉市       |    6042667
 13        | 東京都    | 東京(新宿区) |   12439663
 14        | 神奈川県  | 横浜市       |    8726087
 15        | 新潟県    | 新潟市       |    2449511
 16        | 富山県    | 富山市       |    1116163
 17        | 石川県    | 金沢市       |    1177353
 18        | 福井県    | 福井市       |     826240
 19        | 山梨県    | 甲府市       |     887115
 20        | 長野県    | 長野市       |    2212392
 21        | 岐阜県    | 岐阜市       |    2115795
 22        | 静岡県    | 静岡市       |    3795025
 23        | 愛知県    | 名古屋市     |    7187079
 24        | 三重県    | 津市         |    1866282
 25        | 滋賀県    | 大津市       |    1370803
 26        | 京都府    | 京都市       |    2646715
 27        | 大阪府    | 大阪市       |    8839055
 28        | 兵庫県    | 神戸市       |    5589566
 29        | 奈良県    | 奈良市       |    1431358
 30        | 和歌山県  | 和歌山市     |    1052849
 31        | 鳥取県    | 鳥取市       |     610260
 32        | 島根県    | 松江市       |     749833
 33        | 岡山県    | 岡山市       |    1950249
 34        | 広島県    | 広島市       |    2878475
 35        | 山口県    | 山口市       |    1506921
 36        | 徳島県    | 徳島市       |     816163
 37        | 香川県    | 高松市       |    1019335
 38        | 愛媛県    | 松山市       |    1477307
 39        | 高知県    | 高知市       |     803838
 40        | 福岡県    | 福岡市       |    5056173
 41        | 佐賀県    | 佐賀市       |     869922
 42        | 長崎県    | 長崎市       |    1494985
 43        | 熊本県    | 熊本市       |    1851157
 44        | 大分県    | 大分市       |    1214563
 45        | 宮崎県    | 宮崎市       |    1160161
 46        | 鹿児島県  | 鹿児島市     |    1768095
 47        | 沖縄県    | 那覇市       |    1352496
(47 行)

ubuntu10pgsqldb=>
  • 外部からのJDBC接続確認を行う。まずはpg_hda.confを編集。
absj31@absj31-MyHomeServer:~$ sudo vi /etc/postgresql/8.4/main/pg_hba.conf
------------------------------
以下の行を追記。
host    all         all         (サーバ接続するPCを含むIPのデフォルトゲートウェイ)/8       trust
------------------------------
package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class PostgreSQLConnectTest {
    public static void main(String[] args) {
        String prefCode = "";
        String prefName = "";
        int population = 0;

        Statement stmt = null;
        ResultSet rs = null;
        Connection con = null;
        try {
            // JDBCドライバの登録
            String driver = "org.postgresql.Driver";

            // データベースの指定
            String url = "jdbc:postgresql://(IPアドレス)/(接続DB)";
            // サーバ名またはIPアドレス+データベース名
            String user = "(DB接続ユーザ)"; // データベース作成ユーザ名
            String password = "(DB接続パスワード)"; // データベース作成ユーザパスワード

            Class.forName(driver);

            // データベースとの接続
            con = DriverManager.getConnection(url, user, password);

            // テーブル照会実行
            stmt = con.createStatement();
            String sql = "SELECT * FROM mst_pref";
            rs = stmt.executeQuery(sql);

            // テーブル照会結果を出力
            while (rs.next()) {
                prefCode = rs.getString("pref_code");
                prefName = rs.getString("pref_name");
                population = rs.getInt("population");
                System.out.println("都道府県コード:[" + prefCode + "] 都道府県名:[" + prefName + "] 人口:[" + population + "]");
            }
            // データベースのクローズ
            rs.close();
            stmt.close();
            con.close();
        } catch (SQLException e) {
            System.err.println("SQL failed.");
            e.printStackTrace();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        } finally {
        }
    }

}



参考: