如何在不指定数据库名称的情况下连接到 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:

CREATEDATABASE 实际上是通过复制现有数据库来工作的 默认情况下,它复制名为 template1的标准系统数据库 该数据库就是构建新数据库的“模板” 将对象添加到 template1,这些对象将被复制到 随后创建用户数据库。此行为允许站点本地 修改数据库中的标准对象集 例如,如果在 template1中安装工作语言 PL/pgSQL, 它将自动在用户数据库中可用,不需要任何额外的 当这些数据库建立时所采取的行动。

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

49742 次浏览

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

Why don't you connect to your Maintenance DB (usually postgres?). I don't know if that'll work. But I believe you'll have to query this database anyway to retrieve the databases available to a given user.

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