Мне нужно подключиться к некоторому серверу 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 фактически работает, копируя существующую базу данных. По умолчанию он копирует стандартную системную базу данных с именем template1. Таким образом, эта база данных является «шаблоном», из которого создаются новые базы данных. Если вы добавите объекты в шаблон1, эти объекты будут скопированы в последующие созданные пользовательские базы данных. Такое поведение допускает локальные модификации сайта для стандартного набора объектов в базах данных. Например, если вы устанавливаете процедурный язык PL / pgSQL в template1, он будет автоматически доступен в пользовательских базах данных без каких-либо дополнительных действий, предпринимаемых при создании этих баз данных.
Есть ли способ подключения без указания какой-либо базы данных?
Вам нужно подключиться к базе данных. Какая база данных, которую вы можете использовать для «базы данных обслуживания», зависит от установки и последующего администрирования. После установки по умолчанию есть две базы данных, которые могут использоваться для первоначального подключения – «template1» и «postgres». Целесообразно создать нового пользователя и базу данных с тем же именем и использовать их.
Почему бы вам не подключиться к вашей БД обслуживания (обычно postgres
?). Я не знаю, сработает ли это. Но я считаю, что вам придется запросить эту базу данных в любом случае, чтобы получить базы данных, доступные данному пользователю.
Как указано в руководстве pg_connect, параметр dbname в строке подключения по умолчанию соответствует значению параметра пользователя. Вот почему он использует «testuser». Если вы хотите, чтобы dbname было пустым, попробуйте "... dbname='' ..."
.