ユーザ用ツール

サイト用ツール


postgresql

postgresql

postgresqlのバックアップリストア

動かないときのチェック

SELinux

http://lets.postgresql.jp/documents/tutorial/centos/3

restorecon -R /var/lib/pgsql/data/

=====インストール

yum

yumでPostgreSQLをインストールしてみよう http://lets.postgresql.jp/documents/tutorial/yum/

rpm

rootユーザーで以下のコマンドを実行しインストールする

rpm -ivh pgdg-redhat-8.4-2.noarch.rpm  
yum update
yum install postgresql-server
====================================================================================================================
Package                          Arch                Version                           Repository             Size
====================================================================================================================
Installing:
 postgresql-server                i386                8.4.4-2PGDG.el5                   pgdg84                4.5 M
Installing for dependencies:

postgresql i386 8.4.4-2PGDG.el5 pgdg84 1.4 M

 postgresql-libs                  i386                8.4.4-2PGDG.el5                   pgdg84                200 k

Transaction Summary
====================================================================================================================
Install       3 Package(s)
Upgrade       0 Package(s)

PostgreSQLインストール http://wiki.livedoor.jp/khazad_lefty/d/PostgreSQL%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB

初期設定

initdb でデータベースシステムを作成する

# su - postgres
$ initdb -D /var/lib/pgsql/data
エンコード、ロケール指定
($ initdb --encoding=UTF8 --no-locale -D /var/lib/pgsql/data)

ユーザー作成

# su - postgres
$ createuser -P newuser
新しいロールのパスワード:
もう一度入力してください:
新しいロールをスーパーユーザとしますか?  (y/n)n
新しいロールにデータベース作成権限を与えますか? (y/n)y
新しいロールにロールを作成する権限を与えますか? (y/n)n

接続の設定

redhat は /var/lib/pgsql/data 配下

listen対象のホストを設定

・postgres.conf

listen_addresses = '*'

接続に対する認証方法を設定

・pg_hba.conf

host    all         all         127.0.0.1/32          trust
host    all         all         0.0.0.0/0             password

trust は認証せずに接続 passwordはパスワード接続

ファイアーウォール

接続用ポートを開く(redhatの設定)

lokkit -q --port=5432:tcp

*セキュリティ設定(pg_hba.conf) http://www.postgresql.jp/document/8.4/html/auth-pg-hba-conf.html

*接続と認証(postgres.conf) http://www.postgresql.jp/document/8.4/html/runtime-config-connection.html

*認証方式 http://www.postgresql.jp/document/8.4/html/auth-methods.html#AUTH-PASSWORD

PostgreSQLデータベースパスワードはオペレーティングシステムのユーザパスワードとも別のものです。 各データベースユーザのパスワードはpg_authidシステムカタログテーブルの中に格納されます。 CREATE USER foo WITH PASSWORD 'secret'; のように、パスワードはSQLコマンド CREATE USERとALTER USERを使って管理できます。 デフォルトでは、パスワードが設定されない場合、 格納されるパスワードはNULLとなり、そのユーザのパスワード認証は常に失敗します。

postgresユーザーのパスワード変更

su - postgres
psql 
alter user postgres with password '設定するパスワード';

再起動方法

*起動

( $/etc/init.d/postgresql start )
$pg_ctl start

*再起動

( $/etc/init.d/postgresql restart )
$pg_ctl restart

*停止

( $/etc/init.d/postgresql stop )
$pg_ctl stop

文字列の扱い

PostgreSQL 文字列 http://www.ne.jp/asahi/hishidama/home/tech/postgres/string.html

* 文字列長

char,varcharの長さの指定は、テーブルのエンコードタイプの文字数。 つまり、SQL_ASCIIの時はバイト単位(全角文字は2バイト、半角文字は1バイト)となり、 SJIS・EUC_JP・UNICODEの時は全角文字も半角文字も1文字となる。 length関数で返ってくる数値も同じ。

エンコード

タイプ 全角1文字 半角1文字
SQL_ASCII 2 1
SJISEUC_JP UNICODE 1 1

http://lets.postgresql.jp/documents/technical/text-processing/2

データベース作成

#psql postgres
postgres=#create database
        newdb
        with owner = newuser;

れぞれのユーザに、ユーザ名と同じ名前のスキーマを作成することができます。 デフォルトの検索パスが $user で始まることを思い出してください。これはユーザ名に解決されます。 つまり、各ユーザが個別のスキーマを持っていると、デフォルトでそれぞれのスキーマにアクセスすることになります。

#psql newdb newuser
newdb=>create schema
     newschema
     authorization newuser;

その他

レスポンスチューニング

  http://d.hatena.ne.jp/bgvillea/20100125/p1
  reindexとVacuum Fullについては今まで通り手動でやる必要がある。 ただし、通常Vacuum Fullは行う必要がほとんどないとのことで、行わなければいけない状況(max_fsm_pagesのアラートが出るなど)が発生するのは何らかの設定が間違ってる可能性が高いとのコト。 また、その状況に陥った場合はpg_dumpしてDBを作り直した方がよいとのことでした。
  チューニングで特に大事な設定項目。
   shared_buffers(物理メモリの10~20%) 
   checkpoint_segments(10~16の範囲(増やし過ぎるとWALがディスクサイズを消費するので注意)) 
   checkpoint_completion_target(更新が多い場合は0.6~0.9) 
   bgwriter_all_maxpages(更新メイン:~40、参照メイン:100~) 
   bgwriter_percent(更新メイン:~5、参照メイン:5~10)

データベースクラスタとは

  ディスク上に確保したデータベース格納領域
  ファイルシステムの観点から見ると、「全てのデータが格納される1つのディレクトリ」となる
  そのディレクトリ配下にデータベース全てのデータが格納される
  任意の場所に作成可能(特にデフォルトの場所はない)

PostgreSQLのアンインストール

  yum remove で、インストールした関連プログラム(postgresql-server,postgresql,postgresql-libsの3つ)を削除する。
  /var/lib/pgsql/ に関連ファイルが残っているので削除(問題がなければディレクトリごと削除)

Dataの場所(Disk)を変更する。

データディレクトリの場所についてはdata_directoryが-DとPGDATAを上書きし、
設定ファイルの場所については上書きしないことに注意してください。 

つまり pg_ctl -D で指定された場所に、postgresql.conf を配置し、 postgresql.confのdata_directoryの場所にdataクラスタをおけばよい。

postgresqlで”select count(*) from table_name”が遅い対応

http://vmemo.blog36.fc2.com/blog-entry-421.html

select count(*) from table_name where id>0; と、idは正の整数なんで、全部検索されるハズの一見意味のない条件を付けてみる。 これが効果があるようで、速度が劇的に改善。

文字コード

initdb コマンドでデータベースクラスタ作成時に指定するが、 createdbでも個別に指定できる。

createdb -E UTF8 -T template0 testdb

というように、template0を指定してcreatedbを行う。

postgresql.txt · 最終更新: 2020/04/11 12:09 by nabezo