2017-09-11 5 views
1

私はしばらくの間postgresqlで遊んでいて、これは私の目を引っ張ってきました。 postgresqlの "マップされた関係"とは何ですか?レベル状態 - ディスク上のファイルの名前がゼロである場合のマニュアルに従って、postgresqlのマップされた関係

は、それは、そのディスクファイル名低いことによって決定される「マッピング」 関係と呼ばれています。

それを参照する固定OIDを持たない単純な関係ですか?それはなぜ作成されますか?その意義は何ですか?それとも、一時テーブルに似ていますか? これに何か光をあてることができますか?

答えて

1

https://www.postgresql.org/docs/current/static/storage-file-layout.html

また、自身のpg_class含む特定のシステム・カタログの、 はpg_class.relfilenodeはゼロを含んでいます。実際のファイル番号は です。これらのカタログは下位レベルのデータ構造に格納されており、pg_relation_filenode()関数を使用して取得した になることができます。

-bash-4.2$ strings /pg/data/base/13805223/12712 | grep very_special 
very_special_name 

新しいテーブル:私たちは読みやすい文字列をチェックし

t=# create table very_special_name(i int); 
CREATE TABLE 
t=# CHECKPOINT; --to actually write to disk 
CHECKPOINT 
t=# select oid from pg_database where datname='t'; 
    oid 
---------- 
13805223 
(1 row) 

:今少し野蛮人(まだユーザーフレンドリー)それがファイルであることを確認する方法

t=# select relfilenode from pg_class where relname = 'pg_class'; 
relfilenode 
------------- 
      0 
(1 row) 

t=# select pg_relation_filenode('pg_class'); 
pg_relation_filenode 
---------------------- 
       12712 
(1 row) 

名前は...

+0

したがって、カタログ表のみがマップされているか、ユーザー表もマップ可能です? – user4658312

+0

そうだと思います。 '' relfilenode = 0'の '' pg_classから選択relnameを試してみてください。それがあなたのデータベースのケースであるかどうかを確認してください。 –

+0

ええ、すべてのDB内のそのクエリの結果はカタログテーブルだけです。ありがとう:) – user4658312

関連する問題