*postgres7.0のインストール [#oa5f0388]
RIGHT:更新日&lastmod();
更新日 2006/01/20 
**postgres7.0のインストール [#g52b5ba7]

  postgres7.0のインストール
  $ cd /usr/local/src
    $ tar zxvf postgresql-7.0.tar.gz
    $ su
    # chown -R postgres.postgres postgresql-7.0
    # mkdir /usr/local/pgsql
    # chown -R postgres.postgres /usr/local/pgsql
    # exit
    $ su postgres
    $ cd postgresql-7.0/src
    $ ./configure --enable-multibyte=EUC_JP --enable-syslog
    ($ ./configure --enable-multibyte=EUC_JP --enable-syslog --with-perl)
    $ make
    $ make install
    (perlモジュールをインストールするときはsuしてインストール
  する必要がある。
 $ cd /usr/local/src
 $ tar zxvf postgresql-7.0.tar.gz
 $ su
 # chown -R postgres.postgres postgresql-7.0
 # mkdir /usr/local/pgsql
 # chown -R postgres.postgres /usr/local/pgsql
 # exit
 $ su postgres
 $ cd postgresql-7.0/src
 $ ./configure --enable-multibyte=EUC_JP --enable-syslog
 ($ ./configure --enable-multibyte=EUC_JP --enable-syslog --with-perl)
 $ make
 $ make install
 (perlモジュールをインストールするときはsuしてインストールする必要がある。
      $ su
      # make install
      # chown -R postgres.postgres /usr/local/pgsql
    )
    $ cd ../doc
    $ make install
 )
 $ cd ../doc
 $ make install

    .bash_profileに
''.bash_profileに''

    # PostgreQSL
    export PATH="$PATH":/usr/local/pgsql/bin
    export POSTGRES_HOME=/usr/local/pgsql
    export PGLIB=$POSTGRES_HOME/lib
    export PGDATA=$POSTGRES_HOME/data
    export MANPATH="$MANPATH":POSTGRES_HOME/man
    export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"

    を追加。
を追加。

    $ source .bash_profile

 
    $ initdb

 
    $ cd /usr/local/pgsql/data
    $ chmod 600 pg_hba.conf

    
    
    pg_hba.confで
pg_hba.confで
  
  #host   all   0.0.0.0    0.0.0.0    trust
の#(コメントアウトを外す)
  
--------------------------------------
logを取るために

 logを取るために
postgresql.confで

  postgresql.confで

  #log_connections = false
  log_connections = true
  #log_timestamp = false
  log_timestamp = true

に変更する。
これらのlogの動作について (--enable-syslog)

これらのlogの動作について (--enable-syslog)~
/usr/local/pgsql/data/postgresql.confの以下のパラメータを変更して、
$ /usr/local/pgsql/bin/postmaster -i -D /usr/local/pgsql/data >/var/log/postgresql.log 2>&1

 $ /usr/local/pgsql/bin/postmaster -i -D /usr/local/pgsql/data >/var/log/  
 postgresql.log 2>&1

で起動時

/usr/local/pgsql/data/postgresql.confに
/usr/local/pgsql/data/postgresql.confに~
log_connections = true

 
/var/log/postgresql.logに
 LOG:  database system was interrupted at 2005-03-24 10:16:03 JST
 LOG:  checkpoint record is at 0/9FC0F0
 LOG:  redo record is at 0/9FC0F0; undo record is at 0/0; shutdown TRUE
 LOG:  next transaction ID: 677; next OID: 25335
 LOG:  database system was not properly shut down; automatic recovery in  progress
 LOG:  record with zero length at 0/9FC130
 LOG:  redo is not required
 
 LOG:  database system is ready

LOG:  database system was interrupted at 2005-03-24 10:16:03 JST
LOG:  checkpoint record is at 0/9FC0F0
LOG:  redo record is at 0/9FC0F0; undo record is at 0/0; shutdown TRUE
LOG:  next transaction ID: 677; next OID: 25335
LOG:  database system was not properly shut down; automatic recovery in progress
LOG:  record with zero length at 0/9FC130
LOG:  redo is not required

LOG:  database system is ready

/usr/local/pgsql/data/postgresql.confに
/usr/local/pgsql/data/postgresql.confに~
log_timestamp = trueを追加

2005-03-24 10:39:29 LOG:  could not create IPv6 socket: アドレスファミリはプロトコルによってサポートされていません
2005-03-24 10:39:29 LOG:  database system was interrupted at 2005-03-24 10:38:05 JST
2005-03-24 10:39:29 LOG:  checkpoint record is at 0/9FC170
2005-03-24 10:39:29 LOG:  redo record is at 0/9FC170; undo record is at 0/0; shutdown TRUE
2005-03-24 10:39:29 LOG:  next transaction ID: 677; next OID: 25335
2005-03-24 10:39:29 LOG:  database system was not properly shut down; automatic
recovery in progress
2005-03-24 10:39:29 LOG:  record with zero length at 0/9FC1B0
2005-03-24 10:39:29 LOG:  redo is not required
 2005-03-24 10:39:29 LOG:  could not create IPv6 socket: アドレスファミリはプロトコルによってサポートされていません
 2005-03-24 10:39:29 LOG:  database system was interrupted at 2005-03-24  10:38:05 JST
 2005-03-24 10:39:29 LOG:  checkpoint record is at 0/9FC170
 2005-03-24 10:39:29 LOG:  redo record is at 0/9FC170; undo record is at 0/0;  shutdown TRUE
 2005-03-24 10:39:29 LOG:  next transaction ID: 677; next OID: 25335
 2005-03-24 10:39:29 LOG:  database system was not properly shut down; automatic
 recovery in progress
 2005-03-24 10:39:29 LOG:  record with zero length at 0/9FC1B0
 2005-03-24 10:39:29 LOG:  redo is not required
 
 
 2005-03-24 10:39:31 LOG:  database system is ready

のようなlogがのこる

2005-03-24 10:39:31 LOG:  database system is ready

のようなlogがのこる
syslogに残すには
syslogに残すには~
syslog = 2とすると

/var/log/messagesに

Mar 24 10:40:24 vvine26r3 postgres[8729]: [1-1] LOG:  could not create IPv6 sock
et: アドレスファミリはプロトコルによってサポートされていません
Mar 24 10:40:24 vvine26r3 postgres[8733]: [2-1] LOG:  database system was interrupted at 2005-03-24 10:39:31 JST
Mar 24 10:40:24 vvine26r3 postgres[8733]: [3-1] LOG:  checkpoint record is at 0/9FC1B0
Mar 24 10:40:24 vvine26r3 postgres[8733]: [4-1] LOG:  redo record is at 0/9FC1B0; undo record is at 0/0; shutdown TRUE
Mar 24 10:40:24 vvine26r3 postgres[8733]: [5-1] LOG:  next transaction ID: 677;
 Mar 24 10:40:24 vvine26r3 postgres[8729]: [1-1] LOG:  could not create IPv6 socket: アドレスファミリはプロトコルによってサポートされていません
 Mar 24 10:40:24 vvine26r3 postgres[8733]: [2-1] LOG:  database system was interrupted at 2005-03-24 10:39:31 JST
 Mar 24 10:40:24 vvine26r3 postgres[8733]: [3-1] LOG:  checkpoint record is at 0/9FC1B0
 Mar 24 10:40:24 vvine26r3 postgres[8733]: [4-1] LOG:  redo record is at 0/9FC1B0; undo record is at 0/0; shutdown TRUE
 Mar 24 10:40:24 vvine26r3 postgres[8733]: [5-1] LOG:  next transaction ID: 677;
next OID: 25335
Mar 24 10:40:24 vvine26r3 postgres[8733]: [6-1] LOG:  database system was not properly shut down; automatic recovery in progress
Mar 24 10:40:24 vvine26r3 postgres[8733]: [7-1] LOG:  record with zero length at 0/9FC1F0
Mar 24 10:40:24 vvine26r3 postgres[8733]: [8-1] LOG:  redo is not required
Mar 24 10:40:26 vvine26r3 postgres[8733]: [9-1] LOG:  database system is ready
 Mar 24 10:40:24 vvine26r3 postgres[8733]: [6-1] LOG:  database system was not properly shut down; automatic recovery in progress
 Mar 24 10:40:24 vvine26r3 postgres[8733]: [7-1] LOG:  record with zero length at 0/9FC1F0
 Mar 24 10:40:24 vvine26r3 postgres[8733]: [8-1] LOG:  redo is not required
 Mar 24 10:40:26 vvine26r3 postgres[8733]: [9-1] LOG:  database system is ready
                          ^^^^^^^^(A)

以下の接続logが取れないことがあるようだ?
Mar 24 10:41:06 vvine26r3 postgres[8736]: [2-1] LOG:  connection received: host=[local] port=
Mar 24 10:41:06 vvine26r3 postgres[8736]: [3-1] LOG:  connection authorized: user=postgres database=test
以下の接続logが取れないことがあるようだ?~
 Mar 24 10:41:06 vvine26r3 postgres[8736]: [2-1] LOG:  connection received:  host=[local] port=
 Mar 24 10:41:06 vvine26r3 postgres[8736]: [3-1] LOG:  connection authorized: user=postgres database=test


syslog_ident = 'postgres'を設定するとsyslog(A)の部分が変わるがDefaultでpostgres
なので変更の設定の必要はない。

/var/log/messages以外に全てのlogを取るには

syslog_facility = 'LOCAL0'を設定し

/etc/syslog.confを

*.info;mail.none;authpriv.none;cron.none;local0.none    /var/log/messages [#g2b9f6a3]
                                         ^^^^^^^^^^^追加(LOCAL0のlogがmessagesに行かないように)
 *.info;mail.none;authpriv.none;cron.none;local0.none    /var/log/messages  [#g2b9f6a3]
                                          ^^^^^^^^^^^追加(LOCAL0のlogがmessagesに行かないように)

# PostgreSQL LOG
local0.*                                                /var/log/postgresql.log
 # PostgreSQL LOG
 local0.*                                                /var/log/postgresql.log

のように変更。

とりあえずはsyslogを利用しなくてもいいかな・・・?

また、Logファイルははじめに以下のように作成しておく。

  # touch /var/log/postgresql.log
    # touch /var/log/postgresql.log
    # chown postgres.postgres /var/log/postgresql.log
    # chmod o-r /var/log/postgresql.log

    $ pg_ctl -w start
	または、
    $ /usr/local/pgsql/bin/postmaster -i -D /usr/local/pgsql/data >/var/log/postgresql.log 2>&1 &

このとき/tmp/.sPGSQL.5432 があると起動しないので消しておく

    $ IpcMemoryCreate: memKey=155356405 , size=24588 ,
    permission=448IpcMemoryCreate: shmget(..., create, ...) failed:
    Invalid argument

等のエラーのときはshardメモリの不足なためなので
  $ postmastter -N 10 -S -i
で起動してみる
  


■ Apache DSO版の作成例(可能ならこれが一番ラク)
''■ Apache DSO版の作成例(可能ならこれが一番ラク)''

    先にDSO機能付きのApacheを作っておく。
    % tar xvzf apache_1.3.12.tar.gz
    % cd apache-1.3.12
    % ./configure --enable-shared=max
    % make
    % make install

    ここからがPHP3
    % cd php-3.0.15-i18n-ja
    % ./configure --with-apxs=/usr/local/apache/bin/apxs --enable-i18n \
        --enable-mbregex --with-pgsql --enable-track-vars
    % make
    % make install

                         DE JE2ISM       2000/05/26

パスワード認証
**パスワード認証 [#bdea2766]
pg_hba.conf
host    all         all         0.0.0.0           0.0.0.0           password

 host    all         all         0.0.0.0           0.0.0.0           password

と設定する「password」だとクリアテキストだが「md5」だと暗号化され、こちらのほうが望ましい。

ユーザ(test)登録には
jtest=# CREATE USER test with PASSWORD '***';

 jtest=# CREATE USER test with PASSWORD '***';

ユーザ(test)削除には
jtest=# DROP USER test;
 jtest=# DROP USER test;

パスワード変更は
jtest=# ALTER USER test PASSWORD '***';

 jtest=# ALTER USER test PASSWORD '***';
 
登録確認は
jtest=# select * from  pg_shadow;
 usename  | usesysid | usecreatedb | usesuper | usecatupd |               passwd                | valuntil | useconfig
----------+----------+-------------+----------+-----------+-------------------------------------+----------+-----------
 postgres |        1 | t           | t        | t         |                                     |          |
 test     |      100 | f           | f        | f         | md5f7dc2e1****40bb8486274***88cc3c5 |          |
(2 rows)
 jtest=# select * from  pg_shadow;
  usename  | usesysid | usecreatedb | usesuper | usecatupd |                 passwd                | valuntil | useconfig
 ----------+----------+-------------+----------+-----------+-------------------------------------+----------+-----------
  postgres |        1 | t           | t        | t         |                                     |          |
  test     |      100 | f           | f        | f         | md5f7dc2e1****40bb8486274***88cc3c5 |          |
 (2 rows)


クライアントからのアクセスは
psql -h (host名) (DB名) (ユーザ名)
 psql -h (host名) (DB名) (ユーザ名)

$ psql -h 10.99.99.106 jtest test
Password:*****
Welcome to psql 7.3.3, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
 $ psql -h 10.99.99.106 jtest test
 Password:*****
 Welcome to psql 7.3.3, the PostgreSQL interactive terminal.
 
 Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

jtest=>
 jtest=>

ユーザ名とDB名が同じときは
$ psql -h (host名) -U (ユーザ名orDB名)
 $ psql -h (host名) -U (ユーザ名orDB名)
で接続できる

$ psql -h (host名) (DB名)
 $ psql -h (host名) (DB名)
だとユーザ名は今loginしているloginユーザ名になる。


ただし、pg_hba.confを
host    all         all         127.0.0.1         255.255.255.255   password
 host    all         all         127.0.0.1         255.255.255.255   password
と設定してもlocalから接続するときはパスワードを聞かれない。(これでいいの?)

参考
**参考 [#d0e2d7c8]
動作しているデータベースにどのようなデータベースを定義したかどんなユーザ
を定義したか表示させるには

データベース:
select * from pg_database;
  datname  | datdba | encoding | datistemplate | datallowconn | datlastsysoid | datvacuumxid | datfrozenxid | datpath | datconfig |     datacl
-----------+--------+----------+---------------+--------------+---------------+--------------+--------------+---------+-----------+-----------------
 jtest     |      1 |        0 | f             | t            |         16974 |          427 |          427 |         |           |
 template1 |      1 |        0 | t             | t            |         16974 |          427 |          427 |         |           | {=,postgres=CT}
 template0 |      1 |        0 | t             | f            |         16974 |          427 |          427 |         |           | {=,postgres=CT}
(3 rows)
   datname  | datdba | encoding | datistemplate | datallowconn | datlastsysoid | datvacuumxid | datfrozenxid | datpath | datconfig |     datacl
 -----------+--------+----------+---------------+--------------+---------------+--------------+--------------+---------+-----------+-----------------
  jtest     |      1 |        0 | f             | t            |         16974 |          427 |          427 |         |           |
  template1 |      1 |        0 | t             | t            |         16974 |          427 |          427 |         |           | {=,postgres=CT}
  template0 |      1 |        0 | t             | f            |         16974 |          427 |          427 |         |           | {=,postgres=CT}
  (3 rows)

ユーザ:
select * from pg_user;
 usename  | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig
----------+----------+-------------+----------+-----------+----------+----------+-----------
 postgres |        1 | t           | t        | t         | ******** |          |
(1 row)
  usename  | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig
 ----------+----------+-------------+----------+-----------+----------+----------+-----------
  postgres |        1 | t           | t        | t         | ******** |          |
 (1 row)

PostgreSQLではテーブル名、フィールド名に日本語が使用できる。 
SQL文法
&color(red){PostgreSQLではテーブル名、フィールド名に日本語が使用できる。}; 
**SQL文法 [#hc4a6fa3]

PostgreSQL簡単使用方法 
[[PostgreSQL簡単使用方法:https://wwwism.dyndns.org/hp/linux/sql.htm]]

・2つのキーでソート

select * from table where sel1=23 and sel2 ='01' order by id1 desc, id2
 select * from table where sel1=23 and sel2 ='01' order by id1 desc, id2

第一のキーがid1,第二のキーがid2。この場合第一キーは降順。

・数値の大小でselect

select * from table where nedan >= 400;
 select * from table where nedan >= 400;

・テーブル名の変更

ALTER TABLE 変更前テーブル名 RENAME TO 変更後テーブル名;
 ALTER TABLE 変更前テーブル名 RENAME TO 変更後テーブル名;

・フィールド名の変更

LTER TABLE テーブル名 RENAME COLUMN 変更前フィールド名 TO 変更後フィールド名;
 LTER TABLE テーブル名 RENAME COLUMN 変更前フィールド名 TO 変更後フィールド名;

・テーブル結合による抽出

# select * from t_montitle order by abs(t_montitle.id), t_montitle.id desc;
 id  |             mondai_title             | tantou  | kamoku_id | jikan | viewflag | etcflag
-----+--------------------------------------+---------+-----------+-------+----------+---------
   1 | 情報社会一般                         | okada   |         1 |     5 |        0 |       1
   2 | 情報活用モラル                       | okada   |         1 |     1 |       -1 |       0
 # select * from t_montitle order by abs(t_montitle.id), t_montitle.id desc;
  id  |             mondai_title             | tantou  | kamoku_id | jikan | viewflag | etcflag
 -----+--------------------------------------+---------+-----------+-------+----------+---------
    1 | 情報社会一般                         | okada   |         1 |     5  |        0 |       1
    2 | 情報活用モラル                       | okada   |         1 |     1 |       -1 |       0


# select * from t_kamoku;
 # select * from t_kamoku;

 id | tantou  |      kamoku_name
----+---------+-----------------------
  1 | okada   | ビジコン
  3 | okada2  | 初級シスアド
  id | tantou  |      kamoku_name
 ----+---------+-----------------------
   1 | okada   | ビジコン
   3 | okada2  | 初級シスアド

上の2つのテーブルを結合してt_montitleのkamoku_idに一致したt_kamokuのidのkamoku_nameをフィールドに追加する

PostgreSQL7.1以降は以下の2つどちらでもOK
(新しい表現)
#select t_montitle.*,t_kamoku.kamoku_name from t_montitle join t_kamoku on t_montitle.kamoku_id = t_kamoku.id order by abs(t_montitle.id), t_montitle.id desc
 #select t_montitle.*,t_kamoku.kamoku_name from t_montitle join t_kamoku on t_montitle.kamoku_id = t_kamoku.id order by abs(t_montitle.id), t_montitle.id desc
(古い表現:7.0以前はこちら)
#select t_montitle.*,t_kamoku.kamoku_name from t_montitle, t_kamoku where (t_montitle.kamoku_id = t_kamoku.id) order by abs(t_montitle.id), t_montitle.id desc
 #select t_montitle.*,t_kamoku.kamoku_name from t_montitle, t_kamoku where (t_montitle.kamoku_id = t_kamoku.id) order by abs(t_montitle.id), t_montitle.id desc

 id  |             mondai_title             | tantou  | kamoku_id | jikan | viewflag | etcflag |      kamoku_name
-----+--------------------------------------+---------+-----------+-------+----------+---------+-----------------------
   1 | 情報社会一般                         | okada   |         1 |     5 |        0 |       1 | ビジコン
   2 | 情報活用モラル                       | okada   |         1 |     1 |       -1 |       0 | ビジコン
  id  |             mondai_title             | tantou  | kamoku_id | jikan |  viewflag | etcflag |      kamoku_name
 -----+--------------------------------------+---------+-----------+-------+----------+---------+-----------------------
    1 | 情報社会一般                         | okada   |         1 |     5  |        0 |       1 | ビジコン
    2 | 情報活用モラル                       | okada   |         1 |     1 |       -1 |       0 | ビジコン

PostgreSQLのDataBaseのバックアップ
***PostgreSQLのDataBaseのバックアップ [#h83276d9]
Postgresqlでのデータベースのバックアップの取り方

        ・バックアップ
''・バックアップ''
        pg_dump -v (データベース名) > (バックアップファイル名)

        Ex) pg_dump -v yoyaku > /home/postgres/backup/yoyaku.dump

        ・リストア
 
''・リストア''
        psql -e (データベース名) < (バックアップファイル名)

        Ex) psql -e yoyaku < /home/postgres/backup/yoyaku.dump

                                   DE JE2ISM      2000/12
Serial型データの使い方
***Serial型データの使い方 [#kf8501bd]
データ型をserialにするとデータをインサートするごと番号を増やしてくれる。

テーブルを作成するときは
create table t_seiseki1
(
        ID              serial,  <---ここ
        kamoku_ID       int4,
''テーブルを作成するときは''
 create table t_seiseki1
 (
         ID              serial,  <---ここ
         kamoku_ID       int4,

等で作成できる。

テーブル作成時
''テーブル作成時''
$ psql ismHTML < t_seiseki1.create
NOTICE:  CREATE TABLE will create implicit sequence "t_seiseki1_id_seq" for "serial" column "t_seiseki1.id"
CREATE TABLE
 NOTICE:  CREATE TABLE will create implicit sequence "t_seiseki1_id_seq"  for "serial" column "t_seiseki1.id"
 CREATE TABLE

というメッセージが出て目的のテーブル以外にserialを管理する
t_seiseki1_id_seq
というテーブルも自動に作成される。
というメッセージが出て目的のテーブル以外にserialを管理する~
t_seiseki1_id_seq~
というテーブルも自動に作成される。~

テーブル削除については(postgresql-7.4.1)
ismHTML=# drop table t_seiseki1;
''テーブル削除については(postgresql-7.4.1)''
 ismHTML=# drop table t_seiseki1;
で、t_seiseki1_id_seq共に削除される。

(バージョンによっては drop sequence t_seiseki1_id_seq;とする必要がある)

また、phpでアクセスするには,このt_seiseki1_id_seqにも
ismHTML=# grant all on t_seiseki1_id_seq to www;
 ismHTML=# grant all on t_seiseki1_id_seq to www;
でアクセスできるようにする。

CSVファイルとしてインポートしたりしたときはシリアル管理に矛盾ができているため

ismHTML=# select setval('t_seiseki1_id_seq',max(id)) from t_seiseki1;
 setval
--------
      8
(1 row)
 ismHTML=# select setval('t_seiseki1_id_seq',max(id)) from t_seiseki1;
  setval
 --------
       8
 (1 row)

というコマンドでシリアル管理を実データにあわせる。
というコマンドでシリアル管理を実データにあわせる。~
これは空テーブルCSVファイルをインポートしたときも必要。


新しいデータをインサートするには
ismHTML=# insert into t_seiseki1(kamoku_id, gkno) values(20, 'c99001');
''新しいデータをインサートするには''
 ismHTML=# insert into t_seiseki1(kamoku_id, gkno) values(20, 'c99001');
のように、シリアルフィールドははずしてフィールド指定でインサートすると
id(serial)は自動インクリメントしてくれる。入力データの無いフィールドは
外して挿入できる。

データを削除した場合はそのテーブルの最大値でなく管理テーブルのlast_value+1に
なる。

次のシーケンス番号
select nextval('t_test_id_seq');
 select nextval('t_test_id_seq');

現在シーケンス番号
select currval('t_test_id_seq');
 select currval('t_test_id_seq');

の表示。ただし、currvalはnextvalを一度実行しておく必要がある。
の表示。ただし、currvalはnextvalを一度実行しておく必要がある。~
テーブルの一部を別テーブルにコピー
t_dataテーブルの一部をt_tmpにコピーする。この場合t_tmpは存在していては
エラーするので事前にdrop table t_tmpをしておく

select * into t_tmp from t_data where no=3;
 select * into t_tmp from t_data where no=3;

--------------------------------------------------------------------------------
RIGHT:[[元ページ:http://wwwism.dyndns.org/hp/linux/postgres.htm]]


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS