1

Using the psql CLI tool with a PostgreSQL 9.6.1 server running on localhost, I created a new tablespace with

create tablespace my_tablespace location /tmp/data;

and found that this created a directory called PG_9.6_201608131.

I can see that 9.6 is the version, but what is the last string of numbers? I'd like to use this to create databases in a Makefile, so it will be helpful to know how that number is derived (rather than just hard-coding it).

asked Jan 20, 2017 at 16:15
2
  • Why do you need a tablespace? And when you do, where do you need to refer to it? Isn't consulting the system catalog suitable for you? Commented Jan 20, 2017 at 16:42
  • @dezso because why not? it's for use as a Makefile target Commented Jan 20, 2017 at 16:52

1 Answer 1

2

I look at the source code of 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

I found PG_9.6_201608131 is made up of three parts.

'PG_' + PG_MAJORVERSION + '_' + CATALOG_VERSION_NO

In PostgreSQL9.6

PG_MAJORVERSION is 9.6

CATALOG_VERSION_NO is 201608131

PG_MAJORVERSION and CATALOG_VERSION_NO both are macro definition in c, it won't change.

source code here

answered Jan 20, 2017 at 16:48

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.