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

**Vine6xでDBの作成 [#ja6b9246]
デフォルトがUTF-8になっているのでEUCでDBを作成するには

 $ createdb -E EUC-JP --locale=ja_JP.EUC_JP  --template=template0 dcmap

とする。DB名 dcmap

**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
 #接続元のクライアントのIPアドレス、ポートがログに出力される 
 #log_connections = false
 log_connections = true
 #log_timestamp = false
 log_timestamp = true

に変更する。

8.0からは

-log_truncate_on_rotation='stderr' 
-redirect_stderr = on  
-log_directoryにログを出力するディレクトリを指定する 
 デフォルトではベースディレクトリ(/var/lib/pgsql/data)にサブディレクトリpg_logを作り、そこに出力するよう設定 
-log_filenameに出力するログファイルのファイル名形式を設定 
デフォルトではpostgresql-%Y-%m-%d_%H%M%S.log
-log_truncate_on_rotation = on  
 offのままだとログファイルが重複したとき追記となる。 
 例えばlog_truncate_on_rotation = onにしてlog_filename = 'postgresql-%d.log'とすると毎日切り替わる1ヶ月で1周するローテーションになります。 
-log_rotation_age:単位分 log_rotation_size:単位KB
 両方設定するとどちらかを満たした時点でファイルが切り替わる 
 どちらも0(ゼロ)を設定すると無効となる 




これらの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 データベース名

●特定のユーザに参照のみのアクセス権を設定/解除
 psql# grant select on 表名 to ユーザ名;
 psql# revoke select on 表名 from ユーザ名;

●すべてのユーザにすべてのアクセス権を設定/解除
 psql# grant all on 表名 to public;
 psql# revoke all on 表名 from public;


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

''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)      |


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

 $ psql postgres

データベース:
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]]
[[''PostgreSQL簡単使用方法'':http://mz80.ism21.net/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 行)

''SELECTでレコード指定''

上位3レコードを選択

 select * from t_kamoku LIMIT 3 OFFSET 0;

3レコード目から4レコード取得

 select * from t_kamoku LIMIT 4 OFFSET 2;

***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に
なる。

次のシーケンス番号
''次のシーケンス番号''(このコマンドを実行すると番号が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]]


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