如何在不指定数据库名称的情况下连接到PostgreSQL?

时间:2010-12-19 13:30:35

标签: php 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实际上是通过复制现有数据库来实现的。通过   默认情况下,它复制名为template1的标准系统数据库。从而   该数据库是从中创建新数据库的“模板”。如果   您将对象添加到template1,这些对象将被复制到   后来创建了用户数据库此行为允许站点本地   修改数据库中的标准对象集。对于   例如,如果在template1中安装过程语言PL / pgSQL,   它将自动在用户数据库中可用而无需任何额外的   制作这些数据库时采取的行动。

有没有指定任何数据库的连接方式?

3 个答案:

答案 0 :(得分:68)

必须连接到数据库。可用于“维护数据库”的数据库取决于安装和后续管理。在默认安装之后,有2个可用于初始连接的数据库 - “template1”和“postgres”。创建一个具有相同名称的新用户和数据库并使用它们是明智的。

答案 1 :(得分:11)

为什么不连接维护数据库(通常是postgres?)。我不知道这是否有用。但我相信你无论如何都要查询这个数据库来检索给定用户可用的数据库。

答案 2 :(得分:2)

正如manual of pg_connect所述,连接字符串中的dbname参数默认为user参数的值。这就是它使用'testuser'的原因。如果您希望dbname为空,请尝试"... dbname='' ..."