9

Linux OS の PostgreSQL のテーブルで利用可能なテーブル、ビュー、関数、データ/コンテンツの物理的な場所を取得することに興味があります。PostgreSQL を SD カード機能とハードディスクにインストールできるというシナリオがあります。SD にテーブル、ビュー、関数、データがある場合、同じ物理的な場所を取得し、ストレージ スペースを交換したいときはいつでもハードディスクにマージ/コピーしたいと考えています。データベースのストレージは、プレーン ファイル アーキテクチャの観点からであるべきだと思います。

また、ファイルの中身を見ることはできますか?つまり、それらにアクセスできますか?

4

3 に答える 3

7

Kevin と Mike は、データ ディレクトリの場所を示すポインタを既に提供しています。ファイル システム内のテーブルの物理的な場所については、次を使用します。

SELECT pg_relation_filepath('my_table');

何をしているのか正確にわかっていない限り、ファイルを直接いじらないでください。

データベース全体は、次のサブディレクトリで表されますPGDATA/base

テーブルスペースを使用すると、さらに複雑になります。詳細については、マニュアルのデータベース ファイル レイアウトの章を参照してください。

クラスタ内の各データベースには、PGDATA/base 内にサブディレクトリがあり、 のデータベースの OID にちなんで名付けられていますpg_database。このサブディレクトリは、データベースのファイルのデフォルトの場所です。特に、そのシステム カタログはそこに保存されます。

...

テーブルとインデックスは個別のファイルに保存されます。通常のリレーションの場合、これらのファイルはテーブルまたはインデックスのファイル ノード 番号にちなんで命名されpg_class.relfilenodeます。

...

このpg_relation_filepath()関数は、すべてのリレーションのパス全体 (PGDATA からの相対パス) を示します。

大胆強調鉱山。
機能についてのマニュアルですpg_relation_filepath()

于 2012-05-03T22:03:24.513 に答える
5

クエリshow data_directory;により、メイン データ ディレクトリが表示されます。しかし、それは必ずしも物がどこに保管されているかを教えてくれるわけではありません。

PostgreSQL では、新しいテーブルスペースを定義できます。テーブルスペースは、ファイルシステム内の名前付きディレクトリです。PostgreSQL では、個々のテーブル、インデックス、およびデータベース全体を、許可されている任意のテーブルスペースに格納できます。したがって、データベースが特定のテーブルスペースに作成された場合、そのオブジェクトはデータ ディレクトリに表示されないと思います。

ディスク上のどこに物が保存されているかについての確実な実行時情報については、おそらくシステム カタログからpg_databasepg_tablespace、またはpg_tablesをクエリする必要があります。表領域情報は、information_schema ビューでも利用できる場合があります。

しかし、ハード ディスクにマージまたはコピーする場合、これらのファイルを使用することはほぼ間違いなく悪いことです。そのような作業には、pg_dump が役立ちます。

于 2012-05-03T12:59:13.363 に答える
3

バックアップの形式としてディスク ファイルをコピーすることについて話している場合は、おそらくこれ、特に継続的なアーカイブとポイント イン タイム リカバリ (PITR) に関するセクションを読む必要があります。

http://www.postgresql.org/docs/current/interactive/backup.html

データベース管理システムをバイパスして、ディスク ファイル内のデータに直接アクセスして解釈しようと考えている場合、それは多くの理由から非常に悪い考えです。1 つは、ストレージ スキームが非常に複雑であることです。また、新しいメジャー リリース (年に 1 回発行) ごとに変更される傾向があります。第三に、 EF Coddの亡霊があなたを悩ませるでしょう。Codd の 12 のルールのルール 8、9、11、および 12 を参照してください。

于 2012-05-03T14:18:20.730 に答える