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