= PostgreSQL = == アップデート時の問題点 == PostgreSQLはFirebird等と異なり、バージョン7から8に更新すると、7で作成したデータベースを扱えなくなってしまう。 読み書きができないのではなく、読むことさえできないようだ。 移行するには、以下の手順を行う必要がある。 * 7でDBをバックアップ * 8に更新 * 先のDBをリストア したがって、これを行わずに更新してしまうと、その環境ではどうやっても移行ができなくなってしまう。 == 極めて簡単な使い方 == 以下はLinuxを対象とし、既に他人が構築した何らかのデータベースが存在し、それに対して操作を行うことを目的とする。 === スーパユーザになる === PostgreSQLがインストールされた時点でLinux上のpostgresというアカウントが作成されている。これは、PostgreSQLデータベースに対するどのようなことでも可能なスーパーユーザである。 作成された時点ではパスワードは設定されておらず(/etc/shadowのパスワード欄は「!!」)、root以外のユーザはpostgresになることはできない。この状態でよいのであれば、postgresのパスワードを設定する必要はない。 ※Linux上のアカウントがスーパーユーザであるという点はFirebirdとは異なる。FirebirdのsysdbaはLinux上アカウントではなく、Firebird自体が管理しているアカウント。 rootからは以下のようにしてpostgresユーザになる。 {{{ su - postgres }}} ※ハイフンは前のユーザ(root)の環境を引き継がないという意味。 以下の操作はpostgresユーザであることを前提とする。 === データベース一覧を表示する === psqlを使ってデータベース一覧を表示する。psqlには、コマンド投入後何かを行ったあとすぐにLinuxプロンプトに戻るモードと、対話的なモードとがあるが、以下ではデータベース一覧を表示して、すぐにLinuxシェルに戻る。 {{{ psql -l }}} === データベースのバックアップとリストア === プレーンテキストのバックアップファイルを作成する。この方法は他のデータベースへの可搬性がある代わりに、ユーザパーミッション等は無視されてしまう。 既に存在するデータベースをバックアップする。以下の方法はデータベースが稼動中でも正しく行われる。 {{{ pg_dump データベース名 > バックアップファイル }}} バックアップ先ファイルにはテキスト形式で書き込まれている。なお、スキーマだけをバックアップするのは以下 {{{ pg_dump -s データベース名 > バックアップファイル }}} データベースをリストアするには、最初に空のデータベースを作成し、次にバックアップファイルを読み込ませる必要がある。 {{{ createdb -T template0 データベース名 psql データベース名 < バックアップファイル }}} データベース作成時に指定するテンプレートとしてはtemplate0, template1がある。通常はtemplate0で良い模様。 === データベースのバックアップとリストア2 === バイナリ形式でバックアップする。 {{{ pg_dump -Fc データベース名 > バックアップファイル }}} -Ftというオプションもあるが、どう違うのか不明。-Fcの方は圧縮されるとのこと。 リストアは以下。 {{{ createdb -T template0 データベース名 pg_restore -d データベース名 -Fc バックアップファイル }}} pg_restoreに-Cフラグをつければデータベースを作成するとマニュアルにはあるが、うまく動かない。 バイナリの場合はユーザの権限もリストアされる。 === ユーザを作成する === postgres以外のユーザを作成しておく、これは別にLinuxのユーザである必要はない(その必要があると記述のある資料も見つかるが。。)。 {{{ createuser ユーザ名 }}} このとき以下のようなメッセージが表示される。 {{{ Shall the new user be allowed to create databases? (y/n) Shall the new user be allowed to createmore new users? (y/n) }}} === データベースに対する操作 === 一つのデータベースに対する操作を行うには、psqlにデータベース名を指定して対話モードで使う。 {{{ psql データベース名 }}} これ以降プロンプトは「データベース名=#」となる。ここで様々なコマンドを投入することができる。 * psqlを抜ける {{{ \q }}} * データベースのユーザ一覧 {{{ select usename from pg_user }}} === pg_hba.confの設定 === Linux(Redhat系のみ?)では、/var/lib/pgsql/data/pg_hba.confにある。 ここでアクセス制御が行われており、拒否された場合には {{{ IDENT authentication failed for user }}} というエラーが発生する。デフォルトでは {{{ local all all ident sameuser }}} となっているが、これでは厳しすぎるので以下のように、ローカルな接続の場合はすべてを許すようにする。 {{{ local all all trust host all all 127.0.0.1 255.255.255.255 trust }}} ※注意:postgresqlを再起動しないと反映されない(再起動しない方法もあるかも)。 {{{ service postgresql restart }}}