Symfoware

Symfowareについての考察blog

Arch LinuxにPostgresqlをインストールする

Arch LinuxにPostgresqlをインストールして外部から接続するまでの手順をメモしておきます。


※2014/5/12追記

最新版だと手順が変わっていたので、メモしました。
ArchLinux(2014.05.01)にPostgreSQL 9.3.4をインストールする





インストールと起動



Arch LinuxのExtraリポジトリにpostgresqlがあるので、
pacmanコマンドでインストールできます。


# pacman -S postgresql




インストールはこれだけです。
Postgresqlを起動するには、以下のコマンドを実行します。


# rc.d start postgresql





なお、OS起動時に自動的にpostgresqlを起動するには、/etc/rc.confの
DAEMONSに追記しておきます。


# DAEMONS
# -------
#
DAEMONS=(syslog-ng network crond sshd postgresql)








Postgresqlの停止



停止は以下のコマンドを実行。


# rc.d stop postgresql








ユーザーの作成



基本的にPostgresqlの操作は、インストール(厳密には起動時)に作成された、
postgresユーザーで行います。

rootでログインしている場合は、まずpostgresユーザーになります。


[root@(none) ~]# su - postgres
[postgres@(none) ~]$





スーパーユーザー「pguser(名称は任意)」を追加するにはこんなコマンドを実行します。


$ createuser -s -P pguser
Enter password for new role: [パスワード入力]
Enter it again: [再度パスワード入力]



createuserの詳細なオプションは以下のURL参照。
http://www.postgresql.org/docs/9.0/static/app-createuser.html








データベースの作成




文字コードUTF8、Collate・CtypeともにCの「test」というデータベースを作ってみます。
※ちょっとした手違いで、CollateとCtypeがen_US.UTF-8になってたので、明示的にcollate,ctypeを指定しています。
こちらを参考にさせて頂きました。
PostgreSQL8.4.0でinitdb時と違う文字コードでcreatedb



[postgres@(none) ~]$ createdb -E UTF8 -T template0 --lc-collate=C --lc-ctype=C test





psqlコマンドで接続してみます。



[postgres@(none) ~]$ psql
psql (9.1.3)
Type "help" for help.

postgres=# \l
                                 List of databases
Name    | Owner | Encoding | Collate |    Ctype    | Access privileg
es
-----------+----------+----------+-------------+-------------+------------------
-----
postgres | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres    
    +
         |         |         |             |             | postgres=CTc/post
gres
template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres    
    +
         |         |         |             |             | postgres=CTc/post
gres
test     | postgres | UTF8     | C         | C         |
(4 rows)



狙い通り、testデータベースが作成出来ました。



\cでテストデータベースに切り替え、テーブルを作成してみます。


postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# create table sample(
test(# id int,
test(# val nchar(100)
test(# );
CREATE TABLE





insertとselectをテスト。


test=# insert into sample(id,val) values (1,'test_value');
INSERT 0 1
test=# select * from sample;
id |                                                 val                    
                        
----+---------------------------------------------------------------------------
---------------------------
1 | test_value                                                                
                        
(1 row)





ちゃんと動いているようなので、\qでpsqlを終了します。


postgres=# \q
[postgres@(none) ~]$










外部からの接続



rootユーザーで操作します。
postgresユーザーになっている場合は、exitでrootに戻ります。


[postgres@(none) ~]$ exit
logout
[root@(none) ~]#




最初に、/var/lib/postgres/data/postgresql.confをエディタで開きます。


# vi /var/lib/postgres/data/postgresql.conf




60行目付近に、listen_addressesという項目がコメントされている箇所があります。
コメントを外し、「localhost」を「*」に変更。


#listen_addresses = 'localhost'
listen_addresses = '*'





次に、/var/lib/postgres/data/pg_hba.confをエディタで開きます。


# vi /var/lib/postgres/data/pg_hba.conf




アクセスを許可するIPセグメントの指定を追記します。
ファイルの一部抜粋はこんな感じ。


# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.1.1/24         trust





最後に設定を反映させるため、Postgresqlを再起動します。


# rc.d restart postgresql







外部接続のテスト



Javaで簡単なプログラムを作成し、テストしました。

PostgresqlのJDBCドライバは以下のページから、9.1-902 JDBC 4をダウンロードして使用しています。
http://jdbc.postgresql.org/download.html


サンプルプログラムはこんな感じになりました。
接続には、createuserで作成したユーザー名を指定しています。


  1. package com.fc2.blog68.symfoware.pg;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.Statement;
  6. public class Sample {
  7.     public static void main(String[] args) {
  8.         try {
  9.             String url = "jdbc:postgresql://192.168.1.12:5432/test";
  10.             String user = "pguser";
  11.             String pass = "password";
  12.             Connection con = DriverManager.getConnection(url, user, pass);
  13.             System.out.println("接続成功");
  14.             
  15.             Statement stmt = con.createStatement();
  16.             
  17.             ResultSet rs = stmt.executeQuery("select * from sample");
  18.             while(rs.next()) {
  19.                 System.out.println(rs.getInt("id"));
  20.                 System.out.println(rs.getString("val"));
  21.             }
  22.             
  23.             stmt.close();
  24.             con.close();
  25.         } catch (Exception e) {
  26.             e.printStackTrace();
  27.         }
  28.     }
  29. }




ちなみに、Java 1.4の頃は、Class.forNameでドライバをロードしていましたが、

Class.forName("org.postgresql.Driver");



1.5か1.6ぐらいからクラスパスにあるドライバを勝手にロードするようになっており、
この記載は不要です。

いつもお決まりで書いてた人は、一回コメントしてみると良いかも。
地味に驚きました。

詳細は、http://www.ne.jp/asahi/hishidama/home/tech/java/jar.html
「JDBC4.0のJDBCドライバー(DriverManager)もサービスプロバイダーの仕組みを使っている。」あたりに詳しく記載されています。
※いつも参考にさせていただいてます。



コンソールには見事コマンドで入力したデータが出力されました。


接続成功
1
test_value







【参考URL】

https://wiki.archlinux.org/index.php/PostgreSQL

createuser

PostgreSQL8.4.0でinitdb時と違う文字コードでcreatedb

Jarファイルメモ(Hishidama's java-archive Memo)

DebianにPostgresqlをインストールし、ユーザーを作成する

DebianのPostgresqlに別の端末からJDBCで接続する



関連記事

テーマ:データベース - ジャンル:コンピュータ

  1. 2012/05/06(日) 16:55:54|
  2. PostgreSQL
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<PostgresqlのCollateとCtype指定によるORDER BYの差異 | ホーム | Ubuntu 12.04へWineのインストールと使い方>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
https://symfoware.blog.fc2.com/tb.php/939-bd146463
この記事にトラックバックする(FC2ブログユーザー)