*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してインストール
  する必要がある。
      $ su
      # make install
      # chown -R postgres.postgres /usr/local/pgsql
    )
    $ cd ../doc
    $ make install

    .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で
  
  #host   all   0.0.0.0    0.0.0.0    trust
の#(コメントアウトを外す)
  

 logを取るために

  postgresql.confで

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

に変更する。
これらの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/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

/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:31 LOG:  database system is ready

のようなlogがのこる
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;
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
                          ^^^^^^^^(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


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に行かないように)

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

のように変更。

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

また、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版の作成例(可能ならこれが一番ラク)

    先に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

パスワード認証
pg_hba.conf
host    all         all         0.0.0.0           0.0.0.0           password

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

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

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

パスワード変更は
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)


クライアントからのアクセスは
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
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

jtest=>

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

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


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

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

データベース:
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)

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

PostgreSQLではテーブル名、フィールド名に日本語が使用できる。 
SQL文法

PostgreSQL簡単使用方法 

・2つのキーでソート

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

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

・数値の大小でselect

select * from table where nedan >= 400;

・テーブル名の変更

ALTER TABLE 変更前テーブル名 RENAME 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_kamoku;

 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
(古い表現: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

 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でのデータベースのバックアップの取り方

        ・バックアップ
        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にするとデータをインサートするごと番号を増やしてくれる。

テーブルを作成するときは
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

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

テーブル削除については(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;
でアクセスできるようにする。

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

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');
のように、シリアルフィールドははずしてフィールド指定でインサートすると
id(serial)は自動インクリメントしてくれる。入力データの無いフィールドは
外して挿入できる。

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

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

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

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

select * into t_tmp from t_data where no=3;

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

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