- 追加された行はこの色です。
- 削除された行はこの色です。
*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]]