PostgreSQL/QuickStart/ja

これは、PostgreSQLのクイックスタートガイドです. 新しいPostgreSQLとその構成について説明します. これは公式ドキュメントを補足するものですが、それに取って代わるものではありません.

PostgreSQLについて少しだけ説明します
PostgreSQL はフリーでオープンソースのリレーショナル・データベース・管理システム(RDBMS; Relational Database Management System)です. PostgreSQLはトランザクション、シェマ、外部キーなどをサポートし、標準で商用も含めて他のいかなるデータベースよりもSQLスタンダードに追従し、セキュアであるとよく云われています.

より詳しい情報をお求めなら、postgresql.org のウェブサイトのページ About をご覧ください.

このアーティクルで説明すること
このアーティクルは Gentooに特化した PostgresSQL RDMS のインストールガイドです.

このアーティクルで使用する ebuild は です.

このアーティクルでは、あなたが PostgreSQL の最新安定版をインストールするという仮定でお話しします. これを書いている時点でのバージョンは 9.3.5 ですが、あなたがインストールするバージョンに応じてコマンドを調整してください.

Ebuilds について
PostgreSQLはPortageのebuild機能でメジャーバージョンに基づいたスロットを提供しています. これにより、PostgreSQLの2つの主要バージョンを同時に動作させることができます. 9.0-9.4のライブラリとサーバーを同時にインストールして使用することができます. これは、古いデータベースから新しいデータベースにデータを移動する必要がある場合、または本番データベースとテスト用データベースを同じマシンに配置する必要がある場合に役立ちます. また、これにより、データベース、対応するライブラリ、または実行可能ファイルが、互換性のない更新によって上書きされるのを防ぎます. このガイドで説明されている移行が必要になります.

さらに、マイナーバージョンアップで提供されているバグやセキュリティの修正は、データベースやPostgreSQLのインストール自体を破壊する恐れなしに適用することができます. 9.3.4は互換性があることが保証されているため9.3.5に更新できます. 9.3.4を出現させてサーバープロセスを再起動する以上の操作は不要です. 移行、再構成、初期化は不要です.

詳細はPostgreSQLのバージョン管理方針を読んでください.

このアーティクルで説明しないこと
カバーされないことがかなりあります. は、2,000ページ近くのどこかにあります. そのため、このクイックスタートガイドでは、多くの詳細を省略します. Gentoo固有の問題といくつかの基本的な構成ガイドラインのみがカバーされます.

The Obsolete Ebuilds
If you have any of the following ebuilds installed, then you have an older, obsolete Gentoo installation of PostgreSQL and should migrate now:, , , and older than 9.0.

The split ebuilds, , and/or have been unified into a single package:. Nothing is required for you to move from the split ebuilds to the unified ebuild other than to emerge the unified ebuild.

この記事では、古いebuildから新しいebuildへの移行について説明します.

USEフラグについて
Information on relevant USE flags:
 * doc: Include the online documentation to be stored on your system
 * pg_legacytimestamp: Use the older, floating-point method for formatting timestamps instead of the higher resolution 64-bit integer method. Unless you had a previous installation that utilized this deprecated method, leave this USE flag disabled. Flipping 'pg_legacytimestamp' will require you to do a dump and restore if any of your databases utilize timestamps. The two methods are incompatible with each other.
 * readline: You really want this enabled. Disabling removes command line editing and history in psql.
 * selinux: This can only be enabled by using the SELinux profile.
 * uuid: Include support to generate a 128 bit random unique identifier. This is useful for merging databases together so the chances of collisions become extremely low.

Emerge しましょう
You may receive a notice regarding that any of the above packages are blocked by any or all of the following packages:, , or. These packages are not maintained and obsoleted. Refer to the section on migration from the previous ebuilds to the new ones to know how to handle this situation.

データベース・クラスタの初期化の準備をしましょう
Once the packages have finished emerging, you may want to edit. There are three lines that effect the defaults of the server and cannot be changed later without deleting the directory that contains the database cluster and reinitializing.

PGDATA defines where to place the configuration files. DATA_DIR defines where to create the database cluster and related files. PG_INITDB_OPTS may contain any extra options you would care to set. The extra options are not required as the reasonable defaults are, ahem, reasonable.

In the following example, PGDATA states that the configuration files are to be located in. DATA_DIR states that the database cluster should be installed to, which is the default. If you decide to stray from the default, bear in mind that it is a very good idea to keep the major version in the path. PG_INITDB_OPTS states that the default locale should be en_US.UTF-8. That is, U.S. English ordering and formatting, and UTF-8 character encoding.

There are six locale options that can be set to override --locale=. The following table lists the six options that, if used, are to be formatted as:.

したがって、デフォルトを英語にしたいが、たとえばスウェーデン語のメッセージが必要な場合、 PG_INITDB_OPTSは次のようになります.

A complete list of language and character encodings supported by the server can be found in the documentation, but your system must also support the respective languages and character encodings. Compare the output of  to the encodings in the documentation.

You can change your locale and encoding selections at database creation time. In order to change the locale for a database after you have created it, you must drop the database and start over again.

これにより、データベースクラスターが作成され、すべての関連サーバーファイルが PGDATAおよび DATA_DIRに格納されます.

設定ファイルはどこにあるのでしょうか
Sample configuration files can be found in (or whatever version), see the trouble shooting section for the script.

This time the focus is upon the files in the PGDATA directory,, instead with primary focus on the  and  files.

postgresql.conf
This is the main configuration file. The line that you may find of immediate interest is listen_addresses. This variable defines to which addresses PostgreSQL will bind. By default, only localhost and the Unix socket are bound. Changing listen_addresses is not enough to enable remote connections. That will be covered in the next section. The official documentation is fairly easy to understand and is exhaustive on all the settings available. It would behoove you to read that in addition to what is covered here as some things may change.

Of secondary interest is the logging destination. By default, everything is logged to in the DATA_DIR directory. There is an entire subsection of that covers a slew of options for how, what and where to log. The subsection is marked: ERROR REPORTING AND LOGGING.

Other than listen_addresses and the logging options, the rest of the defaults in are reasonable enough to get you going.

pg_hba.conf
ファイルは、誰がデータベースサーバへの接続を許可されているか、接続を確立するためにどの認証方法を使用しなければならないかを記述しています. 繰り返しになりますが、ドキュメントには設定とその意味が網羅されていますが、明確にするためにいくつかのことをここでカバーしています.

As has been mentioned before, by default the server is secure. Kind of. There is only one database role that is available for log in by default: postgres. And, the only way to initiate a connection to the database is through the Unix socket, which is owned by the postgres system user and system group, or via localhost. Now for the "kind of" bit: Any user on the system can make a connection to the database through the localhost. Even as the postgres database superuser.

trustメソッドは、全てのユーザーがパスワードなしで任意のユーザーとしてログオンできるようにするものです. これは、それが暗示するものを指定しているだけです. 指定されたデータベースへの指定されたタイプのすべての接続を、指定された場所から指定されたデータベースユーザ(システムユーザではない)からパスワードなしで指定されたデータベースへのすべての接続を信頼します. これにより、システム上の全てのユーザが最初からローカルホスト接続を介して任意のユーザとしてログオンできるようになります. これは見かけほど危険ではありませんが、ほとんどの状況で深刻なセキュリティリスクをもたらします.

最もよく使用する2つの方法は、 passwordと md5です. passwordメソッドは、接続を開始するためにパスワードが必要であり、パスワードが「in-the-clear」で送信されることのみを指定します. この方法は、Unixソケットやlocalhostを介して接続するなど、そのような情報がマシンから出てこない場合に適しています. md5メソッドはパスワードに似ていますが、md5ハッシュを使用してパスワードを保護します. これは、パスワードがネットワークを通過するときに使用したいものです.

At this point, this author would like to bring your attention to the last two lines, four lines including comments, of the file. PostgreSQL has native support for IPv6 regardless of your desires for such support. Additionally, IPv4 addresses are automatically mapped to IPv6 addresses, i.e., 127.0.0.1 will be mapped to ::FFFF:127.0.0.1 and as "pure" IPv6 ::FFFF:7F00:0001.

ただし、ホスト名がIPアドレスにどのようにマップされるかについては、誤解があるようです. ファイルを見てみましょう.

From the example above you can see that both an IPv4 and an IPv6 IP address are mapped to localhost. When  refers to this file, it will grab the first match and use that as the address; in this case 127.0.0.1. When PostgreSQL parses this, it will match the IPv6 formatted address as well, e.g. ::ffff:127.0.0.1. If, however, the IPv6 address appears first, then  will map to ::1 alone; ::1 is not the same as ::ffff:127.0.0.1. As such, if you do not have ::1 as a permitted means of access,  will not be able to establish a connection. Furthermore, your kernel needs to support the IPv6 protocol.

So, it is better to specify IP addresses alone to  and in  rather than to rely on  to be ordered properly, and it removes any doubt as to which IP addresses are allowed or to which server you will connect.

Give It a Go!
Now start PostgreSQL and set the password for the database superuser postgres.

Change 'trust' to 'password' for the 'host' (not the 'local', Unix domain socket) connections.

Now start the database:

サーバーへの接続を開き、パスワードを設定します:

Change 'trust' to 'password' for the local connection:

次に、データベースに構成を再ロードさせます:

Finally, once everything works as it should, have PostgreSQL start at boot:

At this point you are ready to continue on with the official PostgreSQL Tutorial. The tutorial will guide you through creating roles, databases, schemata and all that fun and useful stuff.

When You Need to Migrate
移行を実行する必要がある理由は2つだけあります. あるメジャーバージョンから別のメジャーバージョンに移行する場合、たとえば、PostgreSQL 8.4.7から9.0.3に移行しますが、9.0.2から9.0.3には移行しません. または、非推奨の浮動小数点タイムスタンプ形式から新しい64ビット整数タイムスタンプ形式に切り替える場合.

Post-9.0 Migration
When upgrading from a previous version of the recent ebuilds, which is any version after 8.4, follow the beginning of this guide before proceeding with this migration.

pg_upgrade, a new utility that comes along with 9.0 and later, simplifies the migration process rather drastically.

However, there are two caveats with using. Firstly, it does not support configuration files being in a different directory than where the data is stored. This can be resolved by using symbolic links. Lastly, it can only migrate from a database from 8.3 or newer. If the database is older, then follow the instructions to migrate from pre-9.0 deployments.

First ensure that the new database cluster is initialized (as described above). Then stop the servers that are going to migrate from and to:

利用可能なバージョンを確認してから、あなたのバージョンを選択してください：

Change the method of database user 'postgres' to trust on local connections on all databases:

It may be necessary to change the permissions of before performing the next step.

Perform the tasks  tells you to do, if any.

これで完了です：

Pre-9.0 Migration: With the New Ebuilds
Because the new ebuilds feature a more advanced slotting method than the previous ones, the downtime is quite minimal, most likely minutes rather than hours.

In the following examples, it is assumed that you are using the default locations and port settings, and that you are migrating from 8.3 to 8.4. Adjust accordingly if you have deviated from the default.

If you have not already done so, follow the installation instructions before starting the migration. Such a compile may hamper performance on the database server but it can keep going.

A couple of files need to be tweaked before beginning the migration. Edit PGPORT in the configuration file to 6543. (Any port number other than what your old installation is bound to will do.)

Next, edit so that only the database superuser postgres can access the database cluster via the Unix socket.

The following should be safe. Read the documentation to be sure.

Don't forget to copy over any other configuration files that you may need.

Begin piping the data from the old cluster to the new cluster.

Edit PGPORT back to 5432.

ユーザーにもう一度アクセスを許可します.

Hopefully everything went according to plan and you have a successfully updated server that contains precisely the same data, bit for bit, as the old server.

Pre-9.0 Migration: From the Obsolete Ebuilds
サーバーのダウンタイムを予定する必要があります. 古い ebuilds は新しい ebuilds と同時にインストールすることはできません. そのため、サーバーを数時間ダウンさせなければならないことを想定してください. もしかしたら週末になるかもしれません.

Before starting, you will need to deny access to the server, so that no changes are made. You may also want to backup your and  and any other configuration file that you deem important.

Follow the steps detailed in this article for installing and configuring the server.

You may break some packages that were built against those packages, but once you have installed you can run   to reemerge any packages that may have been broken.

pgAdmin
pgAdminは、PostgreSQLを管理するためのグラフィカルなユーティリティです.

Server Lacks Instrumentation Functions
This problem is easy to solve, with the solution depending on the version you are using. What is difficult about it is finding the answer. What is required is an import from a file that already exists on the storage drive:. To resolve this issue, run one of the following commands appropriate to the version you have.

For PostgreSQL 9.0 and earlier:

For PostgreSQL 9.1 and later:

Missing config files in and
You can try to move the config files into the directory, where x is your postgresql version number, as follows:

If those files are missing you will need to initialize them.

最初にpostgresのユーザにsuします:

Then, as the postgres user, run  and specify the data directory:

This will generate your configuration files and allow you to copy them over to as shown in the first command in this section.

"ERROR: timezone directory stack overflow" or "FATAL: too many private dirs demanded"
これはシンボリックリンクループが原因です. これを修正するには、以下のように入力します:

zoneinfo を更新するとこのシンボリックリンクが再作成されるので、再度削除する必要があることに注意してください.

Systemd
Force the service to start on bootup:

To start service immediately:

If an error occurs check if the directory is there. If not, then create it like so:

Check the config file permissions:

Service file and changes to it
Systemd service files (postgresql-@SLOT@-.service) can be found in /lib/systemd/system/:

example config change:

This will override the setting appearing in /lib/systemd/system/postgresql-@SLOT@.service.

(source: postgresql-10.service file)

RemoveIPC
PostgreSQL recommends in wiki.postgresql.org/wiki/Systemd to change the RemoveIPC setting to no in /etc/systemd/logind.conf:

(source: wiki.postgresql.org/wiki/Systemd)