2020年12月23日(水) 22:05 Eric Hanson <e...@aquameta.com>:
>
> 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


Reply via email to