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

Sil*_*ght 41 php postgresql

我需要连接到一些提供一些凭据的PostgreSQL服务器,并在该主机上为给定用户打印可用数据库列表.

我在尝试:

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

我得到:

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
Run Code Online (Sandbox Code Playgroud)

我认为这一定是可能的,因为phpPgAdmin做到了,但我查看了phpPpAdmin源代码,发现它们连接到一个名为的数据库template1.

来自http://www.postgresql.org/docs/8.1/interactive/manage-ag-templatedbs.html:

CREATE DATABASE实际上通过复制现有数据库来工作.默认情况下,它复制名为template1的标准系统数据库.因此,该数据库是制作新数据库的"模板".如果向template1添加对象,则会将这些对象复制到随后创建的用户数据库中.此行为允许对数据库中的标准对象集进行站点本地修改.例如,如果在template1中安装过程语言PL/pgSQL,它将自动在用户数据库中可用,而在制作这些数据库时不会采取任何额外操作.

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

Mil*_*dev 76

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

  • 谨防!使用```template1```进行初始连接是一个坏主意,因为它应该被用作新数据库创建的默认模板.如果存在与此数据库的活动连接 - 则无人可以创建新数据库. (3认同)
  • 如果需要创建数据库,可以在命令行中使用`createdb`语句.您只需将访问凭据作为参数传递即可. (2认同)

ont*_*ack 11

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


rik*_*rik 6

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

  • 如果我这样做,错误是一样的。PostgreSQL 仍然尝试连接到数据库“testuser”... (2认同)