Getting my Database name in a C Extension

Started by Cedric Bergerover 11 years ago8 messagesgeneral
Jump to latest
#1Cedric Berger
cedric@precidata.com

Hi,

I'm writing an extention (FDW), and I need, in my C code, the name of
my database ("contrib_regression_test" for example), and I've two
questions:

1) What is the easiest way to get that directly in C?

2) Is there a way to get this information in the SQL extension
installation/update scripts (like the @/extschema/@ substitution)?

Thanks,

--
Cedric Berger
Precidata Sarl
Maladière 71c
2000 Neuchâtel
cedric@precidata.com
032 930 29 62
079 934 11 02

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#2Cedric Berger
cedric@precidata.com
In reply to: Cedric Berger (#1)

Hi,

I'm writing an extention (FDW), and I need, in my C code, the name of
my database ("contrib_regression_test" for example), and I've two
questions:

1) What is the easiest way to get that directly in C?

2) Is there a way to get this information in the SQL extension
installation/update scripts (like the @/extschema/@ substitution)?

Thanks,

Cedric

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Cedric Berger (#2)
Re: Getting my Database name in a C Extension

Cedric Berger <cedric@precidata.com> writes:

I'm writing an extention (FDW), and I need, in my C code, the name of
my database ("contrib_regression_test" for example), and I've two
questions:

1) What is the easiest way to get that directly in C?

The usual locution is "get_database_name(MyDatabaseId)".

2) Is there a way to get this information in the SQL extension
installation/update scripts (like the @/extschema/@ substitution)?

Nope. Doesn't seem to me like a remarkably good idea to refer to it
in that sort of way anyway. What would happen if someone renamed
the database after the extension is installed?

regards, tom lane

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#4John R Pierce
pierce@hogranch.com
In reply to: Cedric Berger (#1)
Re: Getting my Database name in a C Extension

On 10/2/2014 8:11 AM, Cedric Berger wrote:

I'm writing an extention (FDW), and I need, in my C code, the name of
my database ("contrib_regression_test" for example), and I've two
questions:

1) What is the easiest way to get that directly in C?

2) Is there a way to get this information in the SQL extension
installation/update scripts (like the @/extschema/@ substitution)?

you could SELECT CURRENT_CATALOG; using the SPI_ functions from your C,
or directly in your SQL extension script... this returns the database
name (the name is from the sql standard). see
http://www.postgresql.org/docs/current/static/functions-info.html for
more info functions like this available in SQL.

--
john r pierce 37N 122W
somewhere on the middle of the left coast

#5Cedric Berger
cedric@precidata.com
In reply to: Tom Lane (#3)
Re: Getting my Database name in a C Extension

On 02/10/14 18:13, Tom Lane wrote:

Cedric Berger <cedric@precidata.com> writes:

1) What is the easiest way to get that directly in C?

The usual locution is "get_database_name(MyDatabaseId)".

Ok, but then how do I find "MyDatabaseId" in, say,
a BeginForeignScan() or GetForeignRelSize() FDW callback?

http://www.postgresql.org/docs/9.3/static/fdw-callbacks.html

Sorry for these beginner's questions, but I've trouble navigating
the documentation / source / examples for this kind of info.

PS: is "which see for additional details" really good English
in the fdw-callbacks.html documentation?

2) Is there a way to get this information in the SQL extension
installation/update scripts (like the @/extschema/@ substitution)?

Nope. Doesn't seem to me like a remarkably good idea to refer to it
in that sort of way anyway. What would happen if someone renamed
the database after the extension is installed?

Ok,
Make sense,

Thanks
Cedric

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#6Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Cedric Berger (#5)
Re: Getting my Database name in a C Extension

Cedric Berger wrote:

1) What is the easiest way to get that directly in C?

The usual locution is "get_database_name(MyDatabaseId)".

Ok, but then how do I find "MyDatabaseId" in, say,
a BeginForeignScan() or GetForeignRelSize() FDW callback?

It is a global, all you should have to do is
#include "miscadmin.h"

Yours,
Laurenz Albe

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#7Michael Paquier
michael@paquier.xyz
In reply to: Laurenz Albe (#6)
Re: Getting my Database name in a C Extension

On Fri, Oct 3, 2014 at 4:57 PM, Albe Laurenz <laurenz.albe@wien.gv.at>
wrote:

Cedric Berger wrote:

1) What is the easiest way to get that directly in C?

The usual locution is "get_database_name(MyDatabaseId)".

Ok, but then how do I find "MyDatabaseId" in, say,
a BeginForeignScan() or GetForeignRelSize() FDW callback?

It is a global, all you should have to do is
#include "miscadmin.h"

When looking for a global variable, a command like that is generally useful:
$ git grep MyDatabaseId -- *.h
src/include/access/xact.h: Oid dbId;
/* MyDatabaseId */
src/include/miscadmin.h:extern PGDLLIMPORT Oid MyDatabaseId;
Regards,
--
Michael

#8Cedric Berger
cedric@precidata.com
In reply to: Michael Paquier (#7)
Re: Getting my Database name in a C Extension

On 03/10/14 10:23, Michael Paquier wrote:

On Fri, Oct 3, 2014 at 4:57 PM, Albe Laurenz <laurenz.albe@wien.gv.at
<mailto:laurenz.albe@wien.gv.at>> wrote:

Cedric Berger wrote:

1) What is the easiest way to get that directly in C?

The usual locution is "get_database_name(MyDatabaseId)".

Ok, but then how do I find "MyDatabaseId" in, say,
a BeginForeignScan() or GetForeignRelSize() FDW callback?

It is a global, all you should have to do is
#include "miscadmin.h"

When looking for a global variable, a command like that is generally useful:
$ git grep MyDatabaseId -- *.h
src/include/access/xact.h: Oid dbId;
/* MyDatabaseId */
src/include/miscadmin.h:extern PGDLLIMPORT Oid MyDatabaseId;

Thanks a lot!

I didn't think 'MyDatabaseId' was a real variable name...

Cedric

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general