どういうわけか、私のマシンにpostgresqlのインストールがいくつかあるようです。これが間違いなのか、それともUbuntuが奇妙な理由でディレクトリを複製して他の場所に保管しているのかはわかりません。
/etc
にpostgresqlディレクトリがあります
/usr/lib
に1つ
と/opt
に1つ
この時点で私はきちんと混乱しています。
余分なものを削除する方法を教えてください。
どれが余分なものですか?
また、私のRails env内の 'pg' gemが正しいposgresql dbサーバーを指していることを確認する必要があります。
私の問題についてのどんな考えも巨大になるでしょう。
人々がインスタレーションによって何を意味するかについて、いくつかの混乱があるかもしれません。
/etc/postgresql/
フォルダーは、クラスターの構成フォルダーです。/var/lib/postgresql/
フォルダーはデータ用です。/usr/lib/postgresql/
の個別のフォルダーにあります。私は/opt/postgresql
について本当に知りません。ただし、/opt
は「オプションの」バイナリ用であるため、/usr/lib/postgresql/
ではなく、ここにインストールされている可能性があります。
簡単に言うと、複数の場所にファイルがある1つのインストールだけの可能性があります。
インストールした内容を確認する場合は、次の方法が役立ちます。
postgresqlの構造:
少しわかりやすくするために、postgresは次のように構成されています。
バージョンは、文字通り、どのバージョンのpostgresqlプログラムバイナリを参照します。インストールされている各バージョンには、そのバージョンの下にクラスターがインストールされている場合があります。そうでない場合、データや実行中のサーバーが関連付けられていないため、そのバージョンは実質的に休止状態です。
各バージョンの下には、多数のクラスターがあります。クラスターは、実行中のprostgresサーバー(プロセス)と考えることができます。各クラスターには、クライアントが接続するための独自のポート/ソケットファイルが必要です。各クラスターは、単一のバージョンによって管理されます。
各クラスター内には、いくつかのデータベースがあります。クライアントが接続すると、接続先のDBが選択されます。新しいセッションを開かずに、接続先のDBを変更するように要求できますが、接続できるのは1つだけです。
何をインストールしましたか?
インストールされているバージョンを確認するには、dpkg
およびapt
を参照してください。 apt
およびdpkg
を使用してバージョンをアンインストールできるはずですが、各バージョンの下にあるクラスターを確認する前に、これを行わないように十分注意してください。
使用しているクラスターを確認するには、pg_lsclusters
コマンドを使用します。これを呼び出すと、次のような結果になります。
Version Cluster Port Status Owner Data directory Log file
9.1 main 5432 online <unknown> /var/lib/postgres/data/9.1/main /var/log/postgresql/postgresql-9.1-main.log
「ステータス」列に注意してください。クラスターがオンラインでない場合、それはディスク上のデータであり、何も実行していません。オンラインの場合は実行中です。
どのようにクラスターをマージしますか?
pg_dumpall
コマンドを使用して1つのクラスターから別のクラスターにコンテンツをコピーし、バックアップを生成し、psql
を使用して、保持するクラスターにインポートできます。開始する前にすべてのバックアップを保持する価値があります。
使用されなくなったクラスターをどのように削除しますか?
pg_lsclusters
を使用してクラスターに関する詳細を取得し、それらのクラスターのデータディレクトリとログファイルをメモします。
pg_ctlcluster <version> <cluster> stop
を使用してクラスターを停止します。
データフォルダーとオプションでログファイルを削除します。
最後に、データと構成を削除します。データフォルダは/var/lib/postgres/data/<version>/<cluster>
である必要がありますが、pg_lsclusters
の出力を確認してこれを確認してください。クラスターの構成:すべてのクラスターに独自の構成フォルダーがあります/etc/postgresql/<version>/<cluser>/
。
それらを要求したことがないのに、なぜ複数のクラスターを取得したのですか?
通常、新しいクラスターを取得するには、クラスターの作成を明示的に要求する必要があります。これの唯一の例外は、クラスターをアップグレードする場合、新しいクラスターを効果的に作成し、古いクラスターをそのまま残します。
Dpkg -Sを使用して、特定のディレクトリがどのパッケージに属するかを確認できます。これにより、ディレクトリが異なるパッケージに属しているかどうかを確認できます。