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

2022-08-30 09:01:36

我需要连接到一些提供一些凭据的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,它将在用户数据库中自动可用,而无需在创建这些数据库时执行任何额外操作。

有没有办法在不指定任何数据库的情况下进行连接?


答案 1

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


答案 2

为什么不连接到维护数据库(通常是?我不知道这是否有效。但我相信无论如何,您都必须查询此数据库才能检索给定用户可用的数据库。postgres


推荐