- 追加された行はこの色です。
- 削除された行はこの色です。
*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を取るために [#y15ebb7d]
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 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
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
**パスワード認証 [#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 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から接続するときはパスワードを聞かれない。(これでいいの?)
''PHPからは''
$passwd ="*****";
$user ="user1";
$conn = @pg_Connect("host=127.0.0.1 port=5432 password=$passwd user=$user dbname=db");
でアクセスする。
**参考 [#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簡単使用方法'':http://wwwism.dyndns.org/hp/linux/sql.htm]]/''SoftwareDesign 2007 7月号にMysqlとの比較が掲載参考になる''
・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 | ビジコン
''一時テーブルの作成''~
新しいテーブルをセッションが接続されている間だけ作られ、その後は消えるテーブル
CREATE TEMPORARY TABLE [一時テーブル名] as ([条件]);
CREATE TEMPORARY TABLE t_tmp as (select t_swlchk.id, t_swlchk.subitem, \
t_index.location from t_swlchk ,t_index where t_swlchk.key=t_index.key and \
t_swlchk.lflag='1' and t_swlchk.subitem!='Version' and \
t_swlchk.subitem!='ProductID');
その後は「select count(*),subitem,location from t_tmp where location='情報処理教 育センター' GROUP BY subitem,location order by subitem;」のように利用できる
''データの集計''~
テーブルの中からsubitemをlocationが情報処理教育センターに一致するものを集計
# select count(*),subitem,location from t_tmp where location='情報処理教育センター' GROUP BY subitem,location order by subitem;
count | subitem | location
-------+--------------------------------------------+----------------------
1 | ATOK 2005 | 情報処理教育センター
1 | JUSTSYSTEMアプリケーションの追加と削除 | 情報処理教育センター
1 | Microsoft Office Professional Edition 2003 | 情報処理教育センター
1 | Microsoft Office Professional Plus 2007 | 情報処理教育センター
1 | ウイルスバスター2007 | 情報処理教育センター
1 | ウイルスバスター2008 | 情報処理教育センター
3 | 秀丸エディタ | 情報処理教育センター
(7 行)
***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
***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に
なる。
''次のシーケンス番号''(このコマンドを実行すると番号が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;
''シーケンス番号の指定''~
一番目に設定するには次のように指定する。
dcmap=# select setval('t_dcmap_id_seq',1);
setval
--------
1
(1 row)
以下のようになり、last_valueが1になり次のデータに「1」が付くこのとき次に入力されたデータにはidが2になる。「0」はセットできないようので2からスタートになる。まああまり気にしないようにする。
dcmap=# select * from t_dcmap_id_seq ;
sequence_name | last_value | increment_by | max_value | min_value | cache_value | log_cnt | is_cycled | is_called
----------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
t_dcmap_id_seq | 1 | 1 | 9223372036854775807 | 1 | 1 | 0 | f | t
(1 row)
--------------------------------------------------------------------------------
RIGHT:[[元ページ:http://wwwism.dyndns.org/hp/linux/postgres.htm]]