Search Postgresql Archives

Re: Foreign Data Wrapper Handler

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 2020-11-08 at 13:09 -0600, Susan Hurst wrote:
> The first pass thru https://www.postgresql.org/docs/12/fdwhandler.html 
> does not tell me what I think I need to know, but I will digest this 
> more thoroughly. Maybe I need to understand more of the lingo re: 
> foreign data wrappers. I do understand that all fdw names must be unique 
> within a database so if I want to connect to more than one foreign db, I 
> need a different name for each connection. I cannot name each fdw 
> postgres_fdw. I would like to name the fdws something like: 
> dbname_to_foreigndbname.
> 
> For example, here are 2 possible fdws:
> 
> create foreign data wrapper stp_to_geo;
> create foreign data wrapper stp_to_metrics;
> 
> That syntax creates the fdw and I can create user mappings but I cannot 
> import any foreign schemas into my database. The error message says that 
> there is no handler for the fdw. That's where I'm stuck.
> 
> BTW, I did try using postgres_fdw as a handler...
> 
> create foreign data wrapper stp_to_geo handler postgres_fdw;
> 
> ...but then I got these errors:
> ERROR:  function postgres_fdw() does not exist
> ERROR:  foreign-data wrapper "stp_to_geo" does not exist
> 
> Looks like I need to study a bit more.

This is how you would create a new foreign data wrapper object for PostgreSQL:

  CREATE FOREIGN DATA WRAPPER myfdw
     HANDLER public.postgres_fdw_handler
     VALIDATOR public.postgres_fdw_validator;

This assumes that you installed the extension "postgres_fdw" in schema "public".

But you normally don't have to create a new foreign data wrapper: the one named
"postgres_fdw" that is created by the extension is good enough.
The only reason would be to have a foreign data wrapper with non-default options,
but since there are no options for "postgres_fdw", that is moot.

So don't do that.

The hierarchy of objects is as follows:

- The foreign data wrapper encapsulates the code required to access the foreign
  data source.  You need only one per database; no need to create a new one.

- The foreign server encapsulates the connection string to access a remote
  PostgreSQL database.  Define one per remote database you want to access.

- The user mapping encapsulates the credentials for a user to access a foreign server.
  Create one per user and foreign server (or a single one for PUBLIC = everybody).

- The foreign table describes how a remote table is mapped locally.
  Define one per table that interests you.

Yours,
Laurenz Albe
-- 
Cybertec | https://www.cybertec-postgresql.com






[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux