Как мне подключиться к PostgreSQL без указания имени базы данных? - PullRequest
34 голосов
/ 19 декабря 2010

Мне нужно подключиться к серверу 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. таким образом эта база данных является «шаблоном», из которого создаются новые базы данных. Если Вы добавляете объекты в template1, эти объекты будут скопированы в впоследствии созданные пользовательские базы данных. Такое поведение позволяет сайт-локально внесение изменений в стандартный набор объектов в базах данных. За Например, если вы установите процедурный язык PL / pgSQL в template1, он будет автоматически доступен в пользовательских базах данных без каких-либо дополнительных действие, предпринимаемое при создании этих баз данных.

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

Ответы [ 3 ]

70 голосов
/ 19 декабря 2010

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

11 голосов
/ 19 декабря 2010

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

2 голосов
/ 19 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...