2020年12月23日(水) 22:05 Eric Hanson <[email protected]>:
>
> I'm trying to store connection to postgres_fdw in the database I want to be
> able to store the full breadth of connection styles and all the different
> types of connections that libpq supports. But having some troubles.
>
> Postgres_fdw wants options passed into CREATE SERVER, all broken out into
> separate variables, but this format is neither a connection URI, nor a
> keyword/value string. One could imagine writing some parser that extracts
> all the variables and honors collisions in the same way libpq does (like when
> both the path and the query string specify a port), but I really don't want
> to recreate that.
>
> It would be really nice if I could tap into libpq's connection string parser
> from SQL and use it to extract all the variables in a given connection
> string, so that I can then pipe those into CREATE SERVER options. Either
> that, or teach postgres_fdw how to consume standard connection strings.
Does something like this do what you're looking for?
postgres=# SELECT * FROM conninfo_parse('host=node1 user=foo');
keyword | value
---------+-------
user | foo
host | node1
(2 rows)
postgres=# SELECT * FROM conninfo_parse('postgresql://localhost:5433');
keyword | value
---------+-----------
host | localhost
port | 5433
(2 rows)
Basically a wrapper around PQconninfoParse(), I've had the code knocking around
for a while now and finally got round to packaging it into an
extension [1]. It's
on my todo list to submit a patch based on this to core, as it seems Generally
Useful To Have.
[1] https://github.com/ibarwick/conninfo
Regards
Ian Barwick
--
EnterpriseDB: https://www.enterprisedb.com