postgres7.0のインストール

更新日2012-02-10 (金) 11:56:51 更新日 2006/01/20

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を取るために

  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

                                        ^^^^^^^^^^^追加(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;


元ページ

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