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 ------------------------------
- ファイアウォール設定で[ポート:5432]を許可する設定を追加。
- PostgreSQL用のJDBCドライバを入手。入手したファイルはpostgresql-9.0-801.jdbc4.jar。
- 接続確認用のJavaプログラムを記述。クラスパスに上記入手のJDBCドライバを含める事。
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 { } } }
- 同様にGUIツールでも接続を確認してみる。
参考: