Подтвердить что ты не робот

Как подключиться к PostgreSQL без указания имени базы данных?

Мне нужно подключиться к некоторому серверу PostgreSQL, предоставляя некоторые учетные данные, и распечатать список доступных баз данных на этом хосте для данного пользователя.

Я пытаюсь:

<?php
    $connection = pg_connect("host=localhost user=testuser password=123 connect_timeout=5");
?>

И я получаю:

Warning: pg_connect() [function.pg-connect]: Unable to connect to PostgreSQL server: FATAL: database "testuser" does not exist in /var/www/test.php on line 56

Я думал, что это должно быть возможно, потому что phpPgAdmin делает это, но я смотрел источники phpPpAdmin и обнаружил, что они подключаются к базе данных с именем template1.

Из http://www.postgresql.org/docs/8.1/interactive/manage-ag-templatedbs.html:

CREATE DATABASE фактически работает, копируя существующую базу данных. От default, он копирует стандартную системную базу данных с именем template1. таким образом эта база данных является "шаблоном", из которого создаются новые базы данных. Если вы добавляете объекты в шаблон1, эти объекты будут скопированы в впоследствии созданных пользовательских баз данных. Такое поведение позволяет локально модификации стандартного набора объектов в базах данных. Для Например, если вы устанавливаете процедурный язык PL/pgSQL в template1, он будет автоматически доступен в пользовательских базах данных без каких-либо дополнительных действия, предпринимаемые при создании этих баз данных.

Есть ли способ подключения без указания какой-либо базы данных?

4b9b3361

Ответ 1

Вы должны подключаться к базе данных. Какая база данных, которую вы можете использовать для "базы данных обслуживания", зависит от установки и последующего администрирования. После установки по умолчанию есть две базы данных, которые могут использоваться для первоначального подключения - "template1" и "postgres". Целесообразно создать нового пользователя и базу данных с тем же именем и использовать их.

Ответ 2

Почему вы не подключаетесь к своей БД обслуживания (обычно postgres?). Я не знаю, сработает ли это. Но я считаю, что вам придется запросить эту базу данных в любом случае, чтобы получить базы данных, доступные данному пользователю.

Ответ 3

В руководстве pg_connect указано, что параметр dbname в строке подключения по умолчанию соответствует значению параметра пользователя. Вот почему он использует "testuser". Если вы хотите, чтобы имя dbname было пустым, попробуйте "... dbname='' ...".

Ответ 4

Для dbname просто используйте "postgres"