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

  postgres7.0のインストール
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を取るために
***logを取るために [#y15ebb7d]

postgresql.confで

  #log_connections = false
  log_connections = true
  #log_timestamp = false
  log_timestamp = true
 #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
 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 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
 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
''ここからが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

と設定する「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 (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

        \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から接続するときはパスワードを聞かれない。(これでいいの?)

**参考 [#d0e2d7c8]

''テーブル表示''~
 qrp=# \d~
             List of relations
  Schema |     Name     | Type  |  Owner
 --------+--------------+-------+----------~
  public | t_data       | table | postgres
  public | t_kamokucode | table | postgres
  public | t_keyword    | table | postgres
 (3 rows)~
 ~
''フィールドの型表示''~
 qrp=# \d t_data~
                 Table "public.t_data"
    Column   |            Type             | Modifiers
 ------------+-----------------------------+-----------~
  write_time | timestamp without time zone |
  gkno       | character varying(10)       |
  keyword    | character varying(10)       |
  data       | character varying(16)       |
  etc        | character varying(256)      |


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

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

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

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

・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のバックアップ [#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
~                                   DE JE2ISM      2000/12
***Serial型データの使い方 [#kf8501bd]
データ型を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