Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Locked History Actions

postgresql

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