<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pakutoma</id>
	<title>ArchWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pakutoma"/>
	<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/Pakutoma"/>
	<updated>2026-04-18T16:12:59Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=PostgreSQL&amp;diff=9141</id>
		<title>PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=PostgreSQL&amp;diff=9141"/>
		<updated>2017-07-02T07:01:29Z</updated>

		<summary type="html">&lt;p&gt;Pakutoma: php.infoをphp.iniに訂正(php.iniが正しいはずですし、English版でもphp.iniだったので)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:データベース管理システム]]&lt;br /&gt;
[[Category:ウェブサーバー]]&lt;br /&gt;
[[en:PostgreSQL]]&lt;br /&gt;
[[it:PostgreSQL]]&lt;br /&gt;
[[ru:PostgreSQL]]&lt;br /&gt;
[[zh-hans:PostgreSQL]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|PhpPgAdmin}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[http://www.postgresql.org/ PostgreSQL] はオープンソースの、コミュニティドリブンな、標準準拠のオブジェクト関係データベースシステムです。&lt;br /&gt;
&lt;br /&gt;
この文章では PostgreSQL をセットアップする方法を説明してします。リモートクライアントから PostgreSQL にアクセスできるようにする設定方法も紹介します。データベース以外のウェブスタックの設定については、[[LAMP]] ページが役立つでしょう。[[MySQL]] に関連するセクション以外のところを見て下さい。&lt;br /&gt;
&lt;br /&gt;
== はじめに ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&#039;&#039;postgres&#039;&#039; ユーザーになってください&amp;quot; という記述がセクションのところどころで出てくることがあります。この記事では &#039;&#039;postgres&#039;&#039; ユーザーで実行するべきコマンドには {{ic|[postgres]$}} と記しています。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;postgres&#039;&#039; ユーザーのシェルになるには root で次のコマンドを実行します:&lt;br /&gt;
 # su - postgres&lt;br /&gt;
&lt;br /&gt;
sudo を使う場合、以下のコマンドを使用します:&lt;br /&gt;
 $ sudo -i -u postgres&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;postgres&#039;&#039; [[ユーザーとグループ|ユーザー]]は PostgreSQL をインストールしたときに自動で作成されます。ユーザーが作成されたら &#039;&#039;postgres&#039;&#039; ユーザーのパスワードを設定してください。&lt;br /&gt;
&lt;br /&gt;
== PostgreSQL のインストール ==&lt;br /&gt;
&lt;br /&gt;
[[公式リポジトリ]]から {{Pkg|postgresql}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
PostgreSQL を正しく機能させるには、&#039;&#039;postgres&#039;&#039; ユーザーでデータベースクラスタを初期化する必要があります。&#039;&#039;postgres&#039;&#039; ユーザーになって次のコマンドを実行してください:&lt;br /&gt;
 [postgres]$ initdb --locale $LANG -E UTF8 -D &#039;/var/lib/postgres/data&#039;&lt;br /&gt;
&lt;br /&gt;
上記コマンドの説明:&lt;br /&gt;
* &#039;&#039;--locale&#039;&#039; は {{ic|/etc/locale.conf}} ファイルに定義されているロケールを指定します。&lt;br /&gt;
* &#039;&#039;-E&#039;&#039; はデータベースのデフォルトエンコーディングです。&lt;br /&gt;
* &#039;&#039;-D&#039;&#039; はデータベースクラスタが保存されるデフォルトのディレクトリです。&lt;br /&gt;
&lt;br /&gt;
画面に大量の文字が表示され、最後に &#039;&#039;... ok&#039;&#039; が表示されます:&lt;br /&gt;
{{bc|&lt;br /&gt;
The files belonging to this database system will be owned by user &amp;quot;postgres&amp;quot;.&lt;br /&gt;
This user must also own the server process.&lt;br /&gt;
&lt;br /&gt;
The database cluster will be initialized with locale &amp;quot;en_GB.UTF-8&amp;quot;.&lt;br /&gt;
The default text search configuration will be set to &amp;quot;english&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Data page checksums are disabled.&lt;br /&gt;
&lt;br /&gt;
fixing permissions on existing directory /var/lib/postgres/data ... ok&lt;br /&gt;
creating subdirectories ... ok&lt;br /&gt;
selecting default max_connections ... 100&lt;br /&gt;
selecting default shared_buffers ... 128MB&lt;br /&gt;
selecting dynamic shared memory implementation ... posix&lt;br /&gt;
creating configuration files ... ok&lt;br /&gt;
creating template1 database in /var/lib/postgres/data/base/1 ... ok&lt;br /&gt;
initializing pg_authid ... ok&lt;br /&gt;
[...]}}&lt;br /&gt;
&lt;br /&gt;
上記のように表示されれば、初期化が成功しています。{{ic|exit}} で通常ユーザーに戻ってください。&lt;br /&gt;
&lt;br /&gt;
{{ic|postgresql.service}} を root で[[systemd#ユニットを使う|起動・有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|ルートディレクトリを {{ic|/var/lib/postgres}} 以外のディレクトリに変更する場合、サービスファイルを編集する必要があります。ルートディレクトリを {{ic|home}} に配置する場合は {{ic|ProtectHome}} を false に設定してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|データベースを [[Btrfs]] ファイルシステム上に配置する場合は、データベースを作成する前に [[Btrfs#コピーオンライト_.28CoW.29|Copy-on-Write]] を無効化するべきです。[[ZFS]] ファイルシステム上に配置する場合は、[[ZFS#データベース]] を読んでください。}}&lt;br /&gt;
&lt;br /&gt;
== 最初のデータベース/ユーザーの作成 ==&lt;br /&gt;
&lt;br /&gt;
{{Tip|Linux のユーザー名と PostgreSQL ユーザーの名前を同じにした場合、ログインするユーザーを指定しなくても PostgreSQL のデータベースシェルにアクセスすることができます (非常に便利です)。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;postgres&#039;&#039; ユーザーになってください。[http://www.postgresql.org/docs/current/static/app-createuser.html createuser] コマンドを使って新しいデータベースユーザーを追加します:&lt;br /&gt;
 [postgres]$ createuser --interactive&lt;br /&gt;
&lt;br /&gt;
[http://www.postgresql.org/docs/current/static/app-createdb.html createdb] コマンドを使って読み書き権限がある前記のユーザーに新しいデータベースを作成します (データベースユーザーの名前が Linux ユーザーと同じ場合はログインシェルからコマンドを実行してください、もしくはコマンドに {{ic|-U &#039;&#039;database-username&#039;&#039;}} を加えて下さい):&lt;br /&gt;
 $ createdb myDatabaseName&lt;br /&gt;
&lt;br /&gt;
== PostgreSQL の習熟 ==&lt;br /&gt;
&lt;br /&gt;
=== データベースシェルにアクセス ===&lt;br /&gt;
&lt;br /&gt;
postgres ユーザーになってください。基本のデータベースシェル [http://www.postgresql.org/docs/current/static/app-psql.html psql] を起動します。psql ではデータベースやテーブルの作成・削除・パーミッションの設定・生の SQL コマンドの実行など全てが行えます。{{ic|-d}} オプションを使って作成済みのデータベースに接続します (データベースを指定しなかった場合、{{ic|psql}} はユーザー名と同じ名前のデータベースにアクセスします)&lt;br /&gt;
 [postgres]$ psql -d myDatabaseName&lt;br /&gt;
&lt;br /&gt;
便利なコマンド:&lt;br /&gt;
&lt;br /&gt;
ヘルプを表示:&lt;br /&gt;
 =&amp;gt; \help&lt;br /&gt;
特定のデータベースに接続:&lt;br /&gt;
 =&amp;gt; \c &amp;lt;database&amp;gt;&lt;br /&gt;
全てのユーザーとパーミッションレベルを表示:&lt;br /&gt;
 =&amp;gt; \du&lt;br /&gt;
現在のデータベースにある全てのテーブルのサマリー情報を表示:&lt;br /&gt;
 =&amp;gt; \dt&lt;br /&gt;
{{ic|psql}} シェルを終了:&lt;br /&gt;
 =&amp;gt; \q or CTRL+d&lt;br /&gt;
&lt;br /&gt;
多数のメタコマンドが存在しますが、最初は以上のコマンドで十分でしょう。全てのメタコマンドを確認するには、次を実行:&lt;br /&gt;
 =&amp;gt; \?&lt;br /&gt;
&lt;br /&gt;
== 任意の設定 ==&lt;br /&gt;
&lt;br /&gt;
=== リモートホストから PostgreSQL にアクセスできるように設定 ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL データベースサーバーの設定ファイルは {{ic|postgresql.conf}} です。このファイルはサーバーのデータディレクトリ (通常は {{ic|/var/lib/postgres/data}}) に配置されています。このフォルダには {{ic|pg_hba.conf}} など、その他のメインの設定ファイルも保存されます。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトでは、通常ユーザーを使ってこのフォルダを見ることは不可能になっているため、{{ic|find}} や {{ic|locate}} で conf ファイルを探そうとしても見つかりません。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/var/lib/postgres/data/postgresql.conf}} ファイルを編集します。接続と認証のセクションに {{ic|listen_addresses}} という行を追加してください:&lt;br /&gt;
 listen_addresses = &#039;localhost,&#039;&#039;my_local_ip_address&#039;&#039;&#039;&lt;br /&gt;
&#039;*&#039; に設定することで全てのローカルアドレスから使えるようにすることもできます。他の行を注意して見て下さい。&lt;br /&gt;
&lt;br /&gt;
ホストによる認証は {{ic|/var/lib/postgres/data/pg_hba.conf}} で設定します。このファイルでは接続を許可するホストをコントロールします。デフォルトでは、データベースのスーパーユーザーを含め、あらゆるデータベースユーザーとして全てのローカルユーザーが接続できるようになっているので注意してください。以下のように行を追加します:&lt;br /&gt;
 # IPv4 local connections:&lt;br /&gt;
 host  all  all  &#039;&#039;my_remote_client_ip_address&#039;&#039;/32  md5&lt;br /&gt;
{{ic|my_remote_client_ip_address}} はクライアントの IP アドレスに置き換えて下さい。&lt;br /&gt;
&lt;br /&gt;
[http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html pg_hba.conf] のドキュメントも参照。&lt;br /&gt;
&lt;br /&gt;
設定をした後は、{{ic|postgresql}} デーモンを[[systemd#ユニットを使う|再起動]]して変更を適用してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|PostgreSQL はデフォルトでリモート接続にポート {{ic|5432}} を使います。このポートが開いていること、接続が受信できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
トラブルシューティングの際はサーバーのログファイルを見て下さい:&lt;br /&gt;
 $ journalctl -u postgresql&lt;br /&gt;
&lt;br /&gt;
=== PAM で PostgreSQL を認証する設定 ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL には様々な認証方法があります。システムパスワードでユーザーの認証を行いたい場合、設定が必要です。まずは [[PAM]] を有効にしてください。&lt;br /&gt;
&lt;br /&gt;
例えば、上と同じように設定する場合:&lt;br /&gt;
&lt;br /&gt;
 # IPv4 local connections:&lt;br /&gt;
 host   all   all   &#039;&#039;my_remote_client_ip_address&#039;&#039;/32   pam&lt;br /&gt;
&lt;br /&gt;
ただし PostgreSQL サーバーは root 権限を使わずに動作するため {{ic|/etc/shadow}} を読み込むことができません。postgres グループからファイルにアクセスできるように許可することで問題を解決できます:&lt;br /&gt;
&lt;br /&gt;
 # setfacl -m g:postgres:r /etc/shadow&lt;br /&gt;
&lt;br /&gt;
=== デフォルトのデータディレクトリを変更 ===&lt;br /&gt;
&lt;br /&gt;
新しく作成したデータベースが保存されるデフォルトのディレクトリは {{ic|/var/lib/postgres/data}} です。これを変更するには、以下の手順を踏んで下さい:&lt;br /&gt;
&lt;br /&gt;
新しいディレクトリを作成して &#039;&#039;postgres&#039;&#039; ユーザーをディレクトリの所有者にする:&lt;br /&gt;
 # mkdir -p /pathto/pgroot/data&lt;br /&gt;
 # chown -R postgres:postgres /pathto/pgroot&lt;br /&gt;
&#039;&#039;postgres&#039;&#039; ユーザーになって、新しいクラスタを初期化:&lt;br /&gt;
 [postgres]$ initdb -D /pathto/pgroot/data&lt;br /&gt;
&lt;br /&gt;
[[systemd#ユニットファイルの編集]]に書いてあるようにして設定で変数を上書きする必要があります。まず、以下のコマンドを実行:&lt;br /&gt;
 # systemctl edit postgresql.service&lt;br /&gt;
&lt;br /&gt;
Systemctl はドロップインの設定ファイルをエディタで開きます。以下のように書き込んでください:&lt;br /&gt;
&lt;br /&gt;
 [Service]&lt;br /&gt;
 Environment=PGROOT=&#039;&#039;/pathto/pgroot/&#039;&#039;&lt;br /&gt;
 PIDFile=&#039;&#039;/pathto/pgroot/&#039;&#039;data/postmaster.pid&lt;br /&gt;
&lt;br /&gt;
{{ic|/home}} ディレクトリをテーブル領域のデフォルトディレクトリとして使いたい場合、以下の行も追加してください:&lt;br /&gt;
&lt;br /&gt;
 ProtectHome=false&lt;br /&gt;
&lt;br /&gt;
=== 新しいデータベースのデフォルトエンコーディングを UTF-8 に変更 ===&lt;br /&gt;
{{Note|{{ic|initdb}} に {{ic|-E UTF8}} を付けて実行した場合、このステップは必要ありません。}}&lt;br /&gt;
({{ic|createdb blog}} などで) 新しいデータベースを作成するとき、PostgreSQL は実際にはテンプレートデータベースをコピーしています。2つの定義済みテンプレートが存在します: template0 が標準のテンプレートである一方、オンサイトの template1 は管理者によって変更を加えることができるテンプレートでデフォルトで使用されます。新しいデータベースのエンコーディングを変更するには、オンサイトの template1 を変更します。PostgresSQL シェル (psql) にログインして以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
まず、template1 を削除する必要があります。テンプレートは削除できないので、最初に template1 を通常のデータベースにします:&lt;br /&gt;
 UPDATE pg_database SET datistemplate = FALSE WHERE datname = &#039;template1&#039;;&lt;br /&gt;
そして template1 を削除:&lt;br /&gt;
 DROP DATABASE template1;&lt;br /&gt;
次に、新しいデフォルトエンコーディングを使って、template0 から新しいデータベースを作成します:&lt;br /&gt;
 CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = &#039;UNICODE&#039;;&lt;br /&gt;
そして template1 をテンプレートに戻します:&lt;br /&gt;
 UPDATE pg_database SET datistemplate = TRUE WHERE datname = &#039;template1&#039;;&lt;br /&gt;
(任意) このテンプレートに接続できないようにしたい場合、datallowconn を FALSE に設定してください:&lt;br /&gt;
 UPDATE pg_database SET datallowconn = FALSE WHERE datname = &#039;template1&#039;;&lt;br /&gt;
&lt;br /&gt;
{{Note|this last step can create problems when upgrading via {{ic|pg_upgrade}}.}}&lt;br /&gt;
&lt;br /&gt;
これで新しいデータベースを作成することが出来るようになりました:&lt;br /&gt;
 [postgres]$ createdb blog&lt;br /&gt;
&lt;br /&gt;
psql にまたログインしてデータベースを確認すれば、新しいデータベースに適切なエンコーディングがあるのを見れるはずです:&lt;br /&gt;
 \l&lt;br /&gt;
&lt;br /&gt;
                               List of databases&lt;br /&gt;
   Name    |  Owner   | Encoding  | Collation | Ctype |   Access privileges&lt;br /&gt;
 -----------+----------+-----------+-----------+-------+----------------------&lt;br /&gt;
 blog      | postgres | UTF8      | C         | C     |&lt;br /&gt;
 postgres  | postgres | SQL_ASCII | C         | C     |&lt;br /&gt;
 template0 | postgres | SQL_ASCII | C         | C     | =c/postgres&lt;br /&gt;
                                                      : postgres=CTc/postgres&lt;br /&gt;
 template1 | postgres | UTF8      | C         | C     |&lt;br /&gt;
&lt;br /&gt;
== 管理ツール ==&lt;br /&gt;
&lt;br /&gt;
* {{App|[[phpPgAdmin]]|PostgreSQL のウェブベースの管理ツール。|http://phppgadmin.sourceforge.net|{{Pkg|phppgadmin}}}}&lt;br /&gt;
* {{App|pgAdmin|PostgreSQL の GUI ベースの管理ツール。|http://www.pgadmin.org/|{{Pkg|pgadmin3}}}}&lt;br /&gt;
&lt;br /&gt;
== PostgreSQL のアップグレード ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL のメジャーバージョン ({{ic|9.2, 9.3, 9.4, 9.5, 9.6}}) のアップグレードにはメンテナンスが必要です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|以前 9.2 から 9.3 にアップグレードしていて、9.3 から 9.4 にアップグレードしたい場合、コマンドを実行する前にバージョンを変えてください。{{ic|/var/lib/postgres/data-9.2}} が存在する場合、全てのコマンドをコピーアンドペーストすると {{ic|pg_upgrade}} はデータベースのバージョンが間違っているとエラーを表示します。バージョン 9.3 のデータベースが {{ic|/var/lib/postgres/data-9.2/data/}} に保存されるためです。}}&lt;br /&gt;
&lt;br /&gt;
=== クイックガイド ===&lt;br /&gt;
&lt;br /&gt;
{{ic|pg_hba.conf}} や {{ic|postgresql.conf}} などの設定ファイルに変更を加えている場合、新しい設定ファイルに変更を移してください。{{ic|data_directory}}, {{ic|hba_file}}, {{ic|ident_file}} などのオプションを {{ic|postgresql.conf}} で設定している場合は移行を行う前に一時的に設定を解除してください。&lt;br /&gt;
&lt;br /&gt;
{{hc&lt;br /&gt;
|upgrade_pg.sh&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
## Set the old version that we want to upgrade from.&lt;br /&gt;
export FROM_VERSION=9.5&lt;br /&gt;
&lt;br /&gt;
pacman -S --needed postgresql-old-upgrade&lt;br /&gt;
chown postgres:postgres /var/lib/postgres/&lt;br /&gt;
su - postgres -c &amp;quot;mv /var/lib/postgres/data /var/lib/postgres/data-${FROM_VERSION}&amp;quot;&lt;br /&gt;
su - postgres -c &#039;mkdir /var/lib/postgres/data&#039;&lt;br /&gt;
su - postgres -c &amp;quot;initdb --locale $LANG -E UTF8 -D /var/lib/postgres/data&amp;quot;&lt;br /&gt;
su - postgres -c &amp;quot;pg_upgrade -b /opt/pgsql-${FROM_VERSION}/bin/ -B /usr/bin/ -d /var/lib/postgres/data-${FROM_VERSION} -D /var/lib/postgres/data&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== トラブルシューティング ====&lt;br /&gt;
&lt;br /&gt;
{{ic|pg_upgrade}} を実行した際に以下のメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
; cannot write to log file pg_upgrade_internal.log&lt;br /&gt;
; Failure, exiting&lt;br /&gt;
&lt;br /&gt;
: postgres ユーザーに、ログファイルをディレクトリに書き出す権限があるか確認してください (例えば {{ic|/tmp}})。もしくは {{ic|sudo -u postgres}} のかわりに {{ic|su - postgres}} を使って下さい。&lt;br /&gt;
&lt;br /&gt;
: postgres ユーザーからログファイルを書き出す権限があるはずなのにこのエラーが表示される場合、{{ic|/var/lib/postgres}} の所有者が postgres になっていることを確認してください。&lt;br /&gt;
&lt;br /&gt;
; LC_COLLATE error that says that old and new values are different&lt;br /&gt;
&lt;br /&gt;
: 古いロケールが何なのか確認して ({{ic|C}} や {{ic|en_US.UTF-8}} など)、{{ic|initdb}} を実行する際に指定してください:&lt;br /&gt;
: {{bc|&amp;lt;nowiki&amp;gt;sudo -u postgres LC_ALL=C initdb -D /var/lib/postgres/data&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
; There seems to be a postmaster servicing the old cluster.&lt;br /&gt;
; Please shutdown that postmaster and try again.&lt;br /&gt;
&lt;br /&gt;
: postgres が実行していないことを確認してください。エラーが消えない場合、古い PID ファイルを削除する必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
: 古い pg データに存在する古い pid を検索:&lt;br /&gt;
: {{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
  $ sudo -u postgres ls -l /var/lib/postgres/data-9.X&lt;br /&gt;
  total 88&lt;br /&gt;
  -rw------- 1 postgres postgres     4 Mar 25  2012 PG_VERSION&lt;br /&gt;
  drwx------ 8 postgres postgres  4096 Jul 17 00:36 base&lt;br /&gt;
  drwx------ 2 postgres postgres  4096 Jul 17 00:38 global&lt;br /&gt;
  drwx------ 2 postgres postgres  4096 Mar 25  2012 pg_clog&lt;br /&gt;
  -rw------- 1 postgres postgres  4476 Mar 25  2012 pg_hba.conf&lt;br /&gt;
  -rw------- 1 postgres postgres  1636 Mar 25  2012 pg_ident.conf&lt;br /&gt;
  drwx------ 4 postgres postgres  4096 Mar 25  2012 pg_multixact&lt;br /&gt;
  drwx------ 2 postgres postgres  4096 Jul 17 00:05 pg_notify&lt;br /&gt;
  drwx------ 2 postgres postgres  4096 Mar 25  2012 pg_serial&lt;br /&gt;
  drwx------ 2 postgres postgres  4096 Jul 17 00:53 pg_stat_tmp&lt;br /&gt;
  drwx------ 2 postgres postgres  4096 Mar 25  2012 pg_subtrans&lt;br /&gt;
  drwx------ 2 postgres postgres  4096 Mar 25  2012 pg_tblspc&lt;br /&gt;
  drwx------ 2 postgres postgres  4096 Mar 25  2012 pg_twophase&lt;br /&gt;
  drwx------ 3 postgres postgres  4096 Mar 25  2012 pg_xlog&lt;br /&gt;
  -rw------- 1 postgres postgres 19169 Mar 25  2012 postgresql.conf&lt;br /&gt;
  -rw------- 1 postgres postgres    48 Jul 17 00:05 postmaster.opts&lt;br /&gt;
  -rw------- 1 postgres postgres    80 Jul 17 00:05 postmaster.pid   # &amp;lt;-- This is the problem&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
: 古い pid を一時ディレクトリに移動:&lt;br /&gt;
&lt;br /&gt;
: {{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ sudo -u postgres mv /var/lib/postgres/data-9.X/postmaster.pid /tmp&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;nowiki&amp;gt;ERROR: could not access file &amp;quot;$libdir/postgis-2.0&amp;quot;: No such file or directory&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: postgresql 9.X の {{Pkg|postgis}} から {{ic|postgis-2.0.so}} を取得して {{ic|/opt/pgsql-9.X/lib}} にコピーし、postgres ユーザーから読み込めるようにパーミッションを設定してください。&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;nowiki&amp;gt;Your installation references loadable libraries that are missing from the new installation.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
; &amp;lt;nowiki&amp;gt;could not load library &amp;quot;$libdir/postgis-2.2&amp;quot;:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
; &amp;lt;nowiki&amp;gt;ERROR:  incompatible library &amp;quot;/usr/lib/postgresql/postgis-2.2.so&amp;quot;: version mismatch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
; &amp;lt;nowiki&amp;gt;DETAIL:  Server is version 9.6, library is version 9.5.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: 新しいバージョンの PostgreSQL に対して前のバージョンの PostGIS を手動でコンパイルして、アップグレードしてから、新しいバージョンをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
: 以下の例では &#039;&#039;&#039;PostgreSQL 9.5 + PostGIS 2.2&#039;&#039;&#039; から &#039;&#039;&#039;PostgreSQL 9.6 + PostGIS 2.3&#039;&#039;&#039; にアップグレードしています:&lt;br /&gt;
&lt;br /&gt;
: {{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Uninstall PostGIS 2.3.&lt;br /&gt;
sudo pacman -R postgis&lt;br /&gt;
&lt;br /&gt;
# Download and compile PostGIS 2.2 against PostgreSQL 5.6. The latest sources can be found at http://postgis.net/source/&lt;br /&gt;
wget http://download.osgeo.org/postgis/source/postgis-2.2.3.tar.gz&lt;br /&gt;
tar -xvf postgis-2.2.3.tar.gz&lt;br /&gt;
cd postgis-2.2.3&lt;br /&gt;
./configure&lt;br /&gt;
make &lt;br /&gt;
&lt;br /&gt;
# Copy just the files we need to upgrade the database.&lt;br /&gt;
sudo cp postgis/postgis-2.2.so /usr/lib/postgresql&lt;br /&gt;
sudo cp raster/rt_pg/rtpostgis-2.2.so /usr/lib/postgresql                                                &lt;br /&gt;
sudo cp topology/postgis_topology-2.2.so /usr/lib/postgresql&lt;br /&gt;
&lt;br /&gt;
# Run pg_upgrade as described above. It should now finish successfully.&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
# Remove PostGIS 2.2.&lt;br /&gt;
sudo rm /usr/lib/postgresql/postgis-2.2.so&lt;br /&gt;
sudo rm /usr/lib/postgresql/rtpostgis-2.2.so&lt;br /&gt;
sudo rm /usr/lib/postgresql/postgis_topology-2.2.so&lt;br /&gt;
&lt;br /&gt;
# Install PostGIS 2.3 back again.&lt;br /&gt;
sudo pacman -S postgis&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
; Your installation references loadable libraries that are missing from the new installation.&lt;br /&gt;
; You can add these libraries to the new installation, or remove the functions using them from the old installation.&lt;br /&gt;
; A list of problem libraries is in the file:&lt;br /&gt;
;    loadable_libraries.txt&lt;br /&gt;
&lt;br /&gt;
; Could not load library &amp;quot;$libdir/pg_upgrade_support&amp;quot;&lt;br /&gt;
; &amp;lt;nowiki&amp;gt;ERROR: could not access file &amp;quot;$libdir/pg_upgrade_support&amp;quot;: No such file or directory&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: pg_upgrade の実行に失敗したときのファイルが残っています。古いデータで postgres を起動して、各データベースで次を実行: {{ic|DROP SCHEMA IF EXISTS binary_upgrade CASCADE;}}&lt;br /&gt;
&lt;br /&gt;
=== 詳細な手順 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|PostgreSQL の公式の [http://www.postgresql.org/docs/current/static/upgrading.html アップグレードドキュメント] に従って下さい。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|以下の手順はデータを喪失する可能性があります。自己責任でお願いします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/pacman.conf}} ファイルに以下を追加することを推奨します:&lt;br /&gt;
&lt;br /&gt;
 IgnorePkg = postgresql postgresql-libs&lt;br /&gt;
&lt;br /&gt;
上記のように設定することでデータベースが勝手にアップグレードされることを防げます。アップデートがあった場合、pacman は {{ic|pacman.conf}} にエントリがあるためアップグレードをスキップすることを通知します。マイナーバージョンのアップグレード (例: 9.0.3 から 9.0.4) は実行しても問題ありません。しかしながら、メジャーバージョンのアップグレードをした場合 (例: 9.0.x から 9.1.x)、データにアクセスできなくなる可能性があります。毎回 PostgreSQL のホームページ (http://www.postgresql.org/) を確認してアップグレード時に必要な手順を確認してください。詳しくは [http://www.postgresql.org/support/versioning versioning policy] を参照。&lt;br /&gt;
&lt;br /&gt;
PostgreSQL データベースをアップグレードする方法は大きく2つあります。詳しくは公式のドキュメントを読んで下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|pg_upgrade}} を使いたい場合、[[公式リポジトリ]]に {{Pkg|postgresql-old-upgrade}} パッケージが存在します。常に最新の PostgreSQL パッケージの1つ前のメジャーバージョンを実行します。新しいバージョンの PostgreSQL と一緒にインストールすることが可能です。&lt;br /&gt;
&lt;br /&gt;
準備ができたら、次のパッケージをアップグレードしてください: {{Pkg|postgresql}}, {{Pkg|postgresql-libs}}, {{Pkg|postgresql-old-upgrade}}。データディレクトリはバージョンによって変わることがないため、{{ic|pg_upgrade}} を実行する前に、既存のデータディレクトリの名前を変更して、新しいディレクトリに移動する必要があります。新しいデータベースは、このページの一番上で書いているように初期化する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # systemctl stop postgresql&lt;br /&gt;
 # su - postgres -c &#039;mv /var/lib/postgres/data /var/lib/postgres/olddata&#039;&lt;br /&gt;
 # su - postgres -c &#039;initdb --locale $LANG -E UTF8 -D /var/lib/postgres/data&#039;&lt;br /&gt;
&lt;br /&gt;
アップグレードは以下のコマンドのように実行します。何も準備をしないままコマンドを実行するのは止めてください。詳しくは [http://www.postgresql.org/docs/current/static/pgupgrade.html upstream pg_upgrade documentation] を参照。&lt;br /&gt;
&lt;br /&gt;
 # su - postgres -c &#039;pg_upgrade -d /var/lib/postgres/olddata/ -D /var/lib/postgres/data/ -b /opt/pgsql-9.4/bin/ -B /usr/bin/&#039;&lt;br /&gt;
&lt;br /&gt;
==== 手動のダンプとリロード ====&lt;br /&gt;
&lt;br /&gt;
以下のように行います ({{Pkg|postgresql-old-upgrade}} のアップグレードとインストール後に実行):&lt;br /&gt;
&lt;br /&gt;
{{Note|以下は PostgreSQL 9.4 でのコマンドです。PostgreSQL 9.2 の場合、{{ic|/opt/}} に同じようなコマンドがあるはずです。}}&lt;br /&gt;
&lt;br /&gt;
 # systemctl stop postgresql&lt;br /&gt;
 # /opt/pgsql-9.4/bin/pg_ctl -D /var/lib/postgres/olddata/ start&lt;br /&gt;
 # /opt/pgsql-9.4/bin/pg_dumpall &amp;gt;&amp;gt; old_backup.sql&lt;br /&gt;
 # /opt/pgsql-9.4/bin/pg_ctl -D /var/lib/postgres/olddata/ stop&lt;br /&gt;
 # systemctl start postgresql&lt;br /&gt;
 # psql -f old_backup.sql postgres&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== 小規模なトランザクションのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
開発用のローカルマシンで PostgresSQL を使っていて動作が遅い場合、設定で [http://www.postgresql.org/docs/current/static/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT synchronous_commit をオフ] にしてみてください。ただし、[http://www.postgresql.org/docs/current/static/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT 注意事項] があります。&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/var/lib/postgres/data/postgresql.conf|2=&lt;br /&gt;
  synchronous_commit = off&lt;br /&gt;
}}&lt;br /&gt;
=== アイドル状態の際にディスクの書き込みを止めさせる ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL は定期的に内部の &amp;quot;statistics&amp;quot; ファイルを更新しています。デフォルトでは、このファイルはディスク上に保存されるため、ノートパソコンのディスクのスピンダウンの妨げになったり、ハードドライブのシーク音が発生したりします。以下の設定オプションを使うことでこのファイルをメモリ上のファイルシステムに再配置することができます:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/var/lib/postgres/data/postgresql.conf|2=&lt;br /&gt;
  stats_temp_directory = &#039;/run/postgresql&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== pg_connect() でデータベースに接続できない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|php-pgsql}} をインストールして {{ic|php.ini}} ファイルを編集して {{ic|extension&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;pdo_pgsql.so}} や {{ic|extension&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;pgsql.so}} という行をアンコメントして httpd を再起動してください。&lt;/div&gt;</summary>
		<author><name>Pakutoma</name></author>
	</entry>
</feed>