日本本家 http://www.postgresql.jp/

webから管理phpPgAdmin
クライアントPCから管理pgAdmin

パラレル検索?
パーティショニング OK
データ圧縮 ?

割と日本語資料が揃っているので問題があった際には解決策が即座に見つかりそう。
機能云々はあるでしょうが、一般的利用においては無難な選択肢かと思う。

全文検索PostgreSQL/pgroonga
メモPostgreSQL/memo

CentOS 7にて単純にyum installでもいいのだが、ソースコードから作ってみる。

postgresを稼働させるユーザを用意

[root@c ~]# groupadd -r postgres
[root@c ~]# useradd -r -g postgres -d /opt/pgsql -m postgres
[root@c ~]# chmod 755 /opt/pgsql

postgresの最新ソースを取得してコンパイル、インストール

[root@c ~]# su - postgres
[postgres@c ~]$ export PATH=/bin:/usr/bin
[postgres@c ~]$ mkdir src; cd src
[postgres@c src]$ curl -O http://ftp.postgresql.org/pub/source/v10.0/postgresql-10.0.tar.bz2
[postgres@c src]$ bzip2 -cd postgresql-10.0.tar.bz2 | tar xf -
[postgres@c src]$ cd postgresql-10.0
[postgres@c postgresql-10.0]$ ./configure --prefix=/opt/pgsql/v10.0 --with-gssapi
[postgres@c postgresql-10.0]$ make; make check
[postgres@c postgresql-10.0]$ make install
[postgres@c postgresql-10.0]$ ( cd /opt/pgsql; rm -f curt; ln -s v10.0 curt )

*--with-gssapiはもはや趣味領域。付ける必要はないです。samba4ADと連携できるかな?って思って
その後にrootで

[root@c ~]# echo /opt/pgsql/curt/lib > /etc/ld.so.conf.d/pgsql.conf
[root@c ~]# ldconfig

データベースを作成

[postgres@c ~]$ /opt/pgsql/curt/bin/initdb --encoding=UTF8 --no-locale /opt/pgsql/d.100
[postgres@c ~]$ ln -s d.95 data

systemctl unitファイル

yum installでインストールされるpostgresql.serviceを参考に

[root@c ~]# vi /etc/systemd/system/postgresql.service
[Unit]
Description=PostgreSQL database server
After=network.target
 
[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGPORT=5432
Environment=PGDATA=/opt/pgsql/data
OOMScoreAdjust=-1000
ExecStart=/opt/pgsql/curt/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/opt/pgsql/curt/bin/pg_ctl  stop -D ${PGDATA} -s -m fast
ExecReload=/opt/pgsql/curt/bin/pg_ctl reload -D ${PGDATA} -s
TimeoutSec=300
 
[Install]
WantedBy=multi-user.target
 
[root@c ~]#

として作成。その後にsystemdに反映させる。

[root@c ~]# systemctl daemon-reload
[root@c ~]# systemctl list-unit-files --type=service | grep postgresql
postgresql.service                          disabled
 
[root@c ~]#
[root@c ~]# systemctl enable postgresql
[root@c ~]# systemctl start postgresql

*CentOS6なら展開したソースに添付されているpostgresql-9.4.1/contrib/start-scripts/linuxを調整して使用すればいいみたい
その場合、/etc/init.d/postgresとして、/etc/init.dに配置している

加えログインユーザのための/etc/profile.d/pgsql.{sh,csh}も用意します。

ログ設定

そのままの設定だと/opt/pgsql/data/serverlogにログが書き出される。
それでもいいのだが、/var/log/postgres/ とかのフォルダに収めたい。しかもlogrotateありで。
っと言うようにするには、
/opt/pgsql/data/postgresql.conf
を調整します。

■書き出し先を/var/log/postgres/にして現行のpostgresによるログ回転

  1
  2
  3
  4
  5
  6
  7
  8
log_destination = 'stderr'
logging_collector = on
log_directory = '/var/log/postgres'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_file_mode = 0644
log_truncate_on_rotation = off
log_rotation_age = 0
log_rotation_size = 10MB

別途

  1
  2
  3
# mkdir -p /var/log/postgres
# chgrp postgres /var/log/postgres
# chmod 775 /var/log/postgres

/var/log/postgresに10MBづつのログファイルがたまります。だた、そのログファイルは削除されません。

■syslogを使ってログ採取

  1
  2
log_destination = 'stderr'
syslog_facility = 'LOCAL7'

っで、次にrsyslogを調整

  1
  2
*.info;mail.none;authpriv.none;cron.none;local7.none   /var/log/messages
local7.*                                               /var/log/postgres/postgresql.log

加え、/etc/logrotate.d/syslog に /var/log/postgres/postgresql.log を加えます。
これで、ログファイルはlogrotateによって切り替わります。

データベースユーザの作成

インストール直後は、インストールしたユーザアカウントがデフォで入っている。
CentOSに存在するログインユーザに依存せず、新規ユーザを作る事が出来る。

■他のデータベースを作成する権限はなく、また他のユーザも作成できないユーザを創る

  1
  2
  3
  4
  5
$ su - postgres
$ /opt/pgsql/current/bin/createuser --interactive chem
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n

■データベースユーザの削除

  1
  2
  3
$ /opt/pgsql/current/bin/dropuser --interactive chem
Role "chem" will be permanently removed.
Are you sure? (y/n) y

■データベースユーザにパスワードを持たせて作る

  1
  2
  3
  4
  5
  6
$ /opt/pgsql/current/bin/createuser --interactive --pwprompt chem
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n

データベース作成

  1
  2
$ createdb --encoding=UTF8 --owner=chem -e chemdb
CREATE DATABASE chemdb OWNER chem ENCODING 'UTF8';

psycopg2

postgresとpythonとを繋ぐもの

yum install python-psycopg2.x86_64

データベースリンク

同じpostgres内でもデータベース(create database)が違っているとテーブルは参照できない。
ユーザ情報を持つデータベースが存在しているのだが、リレーションで別なデータベース内のテーブルと連携できない。
これを解決するのが dblink 。
2013y03m16d_011540131.png
データベース[Bio]からデータベース[Chem]の表は参照はできないが、dblinkを使うと、Chemの票がBioにもあるように扱える。
*注意 ただし速度はdblinkを使うと明らかに遅くなります。大きい表ならなおの事。
これはソースコードに同封されている dblink を作り、リンクを張りたい元側のデータベースに機能を加えて実現できる。
1.まずはコンパイル

$ cd postgresql-9.2.3/contrib/dblink
$ make
$ make install

2.データベースリンク機能を付与

$ createdb remote
$ psql -c 'CREATE TABLE sample(id int)' remote
$ psql -c 'INSERT INTO  sample values(12345)' remote
$ createdb local
$ psql -l
                                 List of databases
        Name        |  Owner   | Encoding | Collate | Ctype |   Access privileges
--------------------+----------+----------+---------+-------+-----------------------
 local              | postgres | UTF8     | C       | C     |
 remote             | postgres | UTF8     | C       | C     |
(中略)
 
$ psql -c 'CREATE EXTENSION dblink' local
CREATE EXTENSION
 
$ psql -d local
local=# select dblink_connect('dbname=remote');           *リンクテスト
 dblink_connect
----------------
 OK
(1 row)
 
local=# select * from dblink('dbname=remote', 'select id from sample')  as t1 (id int);
  id
-------
 12345
(1 row)

8.4までは

$ psql local -f /opt/postgres/current/share/contrib/dblink.sql

だったみたい

pg_hba.conf

セキュリティーとしていろいろ考える必要はあるのだが、ここでは

[root@c ~]# vi /var/lib/pgsql/data/pg_hba.conf
local   all  all                  trust
host    all  all  127.0.0.1/32    ident
[root@c ~]#

としている。っとその上で


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2017-10-11 (水) 20:30:51 (63d)