ローカルホストで実行されているPostgreSQL9.6.1サーバーでpsql
CLIツールを使用して、新しいテーブルスペースを作成しました。
create tablespace my_tablespace location /tmp/data;
そして、これによりPG_9.6_201608131
というディレクトリが作成されたことがわかりました。
9.6
がバージョンであることがわかりますが、数字の最後の文字列は何ですか?これを使用してMakefileにデータベースを作成したいので、(単にハードコーディングするのではなく)その番号がどのように導出されるかを知っておくと役に立ちます。
Postgres9.6のソースコードを見てみます。
/* tablespace.c */
create_tablespace_directories(const char *location, const Oid tablespaceoid)
{
....
location_with_version_dir = psprintf("%s/%s", location,TABLESPACE_VERSION_DIRECTORY);
....
if (mkdir(location_with_version_dir, S_IRWXU) < 0)
{
....
}
}
/* catalog.h */
#define TABLESPACE_VERSION_DIRECTORY "PG_" PG_MAJORVERSION"_" \
CppAsString2(CATALOG_VERSION_NO)
/* catversion.h */
#define CATALOG_VERSION_NO 201608131
PG_9.6_201608131は3つの部分で構成されていることがわかりました。
'PG_' + PG_MAJORVERSION + '_' + CATALOG_VERSION_NO
PostgreSQL9.6の場合
PG_MAJORVERSIONは9.6です
CATALOG_VERSION_NOは201608131です
PG_MAJORVERSIONとCATALOG_VERSION_NOはどちらもcのマクロ定義であり、変更されません。