http://php.y-110.net/wiki/index.php?PostgreSQL%A1%A7%A5%C1%A5%E5%A1%BC%A5%CB%A5%F3%A5%B0%B4%AA%BD%EA
http://mikasaya754.com/blog/2010/03/postgresql-vacuum/
http://lets.postgresql.jp/documents/tutorial/centos/3
restorecon -R /var/lib/pgsql/data/
=====インストール
yumでPostgreSQLをインストールしてみよう http://lets.postgresql.jp/documents/tutorial/yum/
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 配下
・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となり、そのユーザのパスワード認証は常に失敗します。
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つのディレクトリ」となる そのディレクトリ配下にデータベース全てのデータが格納される 任意の場所に作成可能(特にデフォルトの場所はない)
yum remove で、インストールした関連プログラム(postgresql-server,postgresql,postgresql-libsの3つ)を削除する。 /var/lib/pgsql/ に関連ファイルが残っているので削除(問題がなければディレクトリごと削除)
データディレクトリの場所についてはdata_directoryが-DとPGDATAを上書きし、 設定ファイルの場所については上書きしないことに注意してください。
つまり pg_ctl -D で指定された場所に、postgresql.conf を配置し、 postgresql.confのdata_directoryの場所にdataクラスタをおけばよい。
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を行う。