Обсуждение: BUG #5775: DBLINK Connection String Truncation

Поиск
Список
Период
Сортировка

BUG #5775: DBLINK Connection String Truncation

От
"David Quinn-Jacobs"
Дата:
The following bug has been logged online:

Bug reference:      5775
Logged by:          David Quinn-Jacobs
Email address:      dqj@ecornell.com
PostgreSQL version: 9.0.1
Operating system:   Cent OS 5
Description:        DBLINK Connection String Truncation
Details:

Causes connection failure.  To re-create:

CREATE TABLE Local ( foo TEXT );
CREATE TABLE Remote ( bar TEXT );
CREATE VIEW DblinkBugView AS
    SELECT * FROM Local L
        LEFT OUTER JOIN dblink( 'hostname=123.456.789.012
dbname=a_longish_database_name user=my_user_name password=my_password',
            'SELECT bar FROM Remote' ) AS R ( bar TEXT ) ON (L.foo=R.bar);

The sample case can have both tables located on the same server to simplify.
 The error message is not just generated.  The string is actually truncated,
as demonstrated in the psql command result:


mydb=# SELECT * FROM DblinkBugView;
NOTICE:  identifier "host=123.456.789.012 dbname=a_longish_database_name
user=my_user_name password=my_password" will be truncated to
"host=123.456.789.012 dbname=a_longish_database_name user=my_user_name p"
ERROR:  could not establish connection
DETAIL:  FATAL:  no pg_hba.conf entry for host "123.456.789.012", user
"my_user_name", database "a_longish_database_name", SSL off

Note: I replaced the actual connection strings with equivalents, so the
position of truncation differed slightly.  The password was cut off, so the
connection failed.  The message is a bit incongruous with the actual
problem.

Note also that the code works fine in 8.4, but not 9.0.1.

Thank you!
-dqj

Re: BUG #5775: DBLINK Connection String Truncation

От
Tom Lane
Дата:
"David Quinn-Jacobs" <dqj@ecornell.com> writes:
> Causes connection failure.  To re-create:

> CREATE TABLE Local ( foo TEXT );
> CREATE TABLE Remote ( bar TEXT );
> CREATE VIEW DblinkBugView AS
>     SELECT * FROM Local L
>         LEFT OUTER JOIN dblink( 'hostname=123.456.789.012
> dbname=a_longish_database_name user=my_user_name password=my_password',
>             'SELECT bar FROM Remote' ) AS R ( bar TEXT ) ON (L.foo=R.bar);

> The sample case can have both tables located on the same server to simplify.
>  The error message is not just generated.  The string is actually truncated,
> as demonstrated in the psql command result:

> mydb=# SELECT * FROM DblinkBugView;
> NOTICE:  identifier "host=123.456.789.012 dbname=a_longish_database_name
> user=my_user_name password=my_password" will be truncated to
> "host=123.456.789.012 dbname=a_longish_database_name user=my_user_name p"
> ERROR:  could not establish connection
> DETAIL:  FATAL:  no pg_hba.conf entry for host "123.456.789.012", user
> "my_user_name", database "a_longish_database_name", SSL off

Well, it works for me, as nearly as I can replicate this test case.
I get the bogus NOTICE but the connection goes through anyway:

contrib_regression=# SELECT * FROM DblinkBugView;
NOTICE:  identifier "host=127.0.0.1
dbname=contrib_regression                user=postgres" will be truncated to "host=127.0.0.1
dbname=contrib_regression                user=po"
 foo | bar
-----+-----
(0 rows)

Please notice that the connection error you are getting is *not* about a
bad password.  It looks like you've neglected to provide a pg_hba.conf
entry that will allow dblink connections.

            regards, tom lane