2013-08-09 1 views
1

Так что это супер странно. Я пытаюсь сделать простой выбор с помощью DBLink как таковой:Postgres: 'роль не существует', используя dblink, но это

SELECT * FROM dblink('dbname=my_db_name, user=my_user, password=password, hostaddr=127.0.0.1', 'SELECT action, object, created_at, id FROM my_table') AS de(ACTION VARCHAR, OBJECT VARCHAR, created_at TIMESTAMP, id INT)

И я сразу же я получаю сообщение об ошибке из:

PG::SqlclientUnableToEstablishSqlconnection: ERROR: could not

establish connection DETAIL: FATAL: role "my_user," does not exist

Но если я подключаюсь к Psql локально и распечатать список пользователей с помощью \ йи вы увидите это в списке:

       List of roles 
    Role name |     Attributes     | Member of 
---------------+------------------------------------------------+----------- 
MyName  | Superuser, Create role, Create DB, Replication | {} 
my_user  | Create DB          | {} 

Я действительно в недоумении относительно того, как это исправить, прибегая к помощи не помогла мне много на все либо. Любые мысли о том, почему он дает мне это сообщение об ошибке?

Когда я подключаюсь к своей учетной записи суперпользователя, мне не нужно указывать пароль, а dblink работает нормально, поэтому я совершенно смущен. Здесь находится pg_hba.conf:

local all    all          trust 
local all    all          md5 

host all    all    192.168.33.1/24   trust 

# IPv4 local connections: 
host all    all    127.0.0.1/32   trust 
host all    all    127.0.0.1/32   md5 

# IPv6 local connections: 
host all    all    ::1/128     trust 
host all    all    ::1/128     md5 

Заранее благодарен!

+0

Возможно, «my_user» создан с предыдущим/следующим пробелом? Есть ли пробел, видимый в выводе 'select '>' || rolname || '<' из pg_roles;'? – bma

ответ

5

Попробуйте удалить запятую из строки подключения.

SELECT * FROM dblink('dbname=my_db_name user=my_user password=password hostaddr=127.0.0.1', 'SELECT action, object, created_at, id FROM my_table') AS de(ACTION VARCHAR, OBJECT VARCHAR, created_at TIMESTAMP, id INT) 

Это должно решить проблему, где он пытается удостоверяются как my_user,.

Во-вторых, ваша конфигурация pg_hba является проблемой. Поскольку у вас есть метод доверия, он будет использоваться. Либо попробуйте поместить записи «md5» до записей «доверия», либо удалите записи «доверия». (Сначала установите пароль для своей собственной учетной записи postgres, чтобы вы все еще могли аутентифицироваться после того, как необходимы пароли.)

Причина второй проблемы заключается в том, что если для имени хоста, с которым вы подключены, он будет аутентифицировать пользователя, не требуя пароля, и поскольку не-суперпользователи не могут подключиться без пароля, он не сможет подключиться.

Наконец, пользователь, выполняющий запрос, вызывающий dblink, должен быть аутентифицирован с использованием пароля. Поэтому, если вы используете аутентификацию «trust» для подключения к базе данных, а затем запустите dblink, вы также получите сообщение об ошибке. Чтобы исправить это, измените аутентификацию md5 и подключитесь с помощью пароля.

2

Вы используете запятую в строке подключения. В сообщении об ошибке указано:

FATAL: role "my_user," does not exist 

Это указывает на точную ошибку в этом случае. Это not the way do do it. Вы должны просто отделять элементы в строке соединения, например:

SELECT * FROM dblink('dbname=my_db_name user=my_user password=password hostaddr=127.0.0.1', 'SELECT action, object, created_at, id FROM my_table') AS de(ACTION VARCHAR, OBJECT VARCHAR, created_at TIMESTAMP, id INT) 
Смежные вопросы