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

Php 如何在不指定数据库名称的情况下连接到PostgreSQL?,php,postgresql,Php,Postgresql,我需要连接到提供一些凭据的PostgreSQL server,并为给定用户打印该主机上可用数据库的列表 我正在努力: <?php $connection = pg_connect("host=localhost user=testuser password=123 connect_timeout=5"); ?> 我认为这一定是可能的,因为phpPgAdmin做到了,但我查看了phpPpAdmin源代码,发现它们连接到一个名为template1的数据库 发件人: 创建数据库实

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

我正在努力:

<?php
    $connection = pg_connect("host=localhost user=testuser password=123 connect_timeout=5");
?>
我认为这一定是可能的,因为phpPgAdmin做到了,但我查看了phpPpAdmin源代码,发现它们连接到一个名为
template1
的数据库

发件人:

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


有没有一种方法可以在不指定任何数据库的情况下进行连接?

因为连接字符串中的dbname参数默认为用户参数的值。这就是为什么它使用“testuser”。如果希望dbname为空,请尝试
“…dbname=”…

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

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

如果这样做,错误是相同的。PostgreSQL仍然尝试连接到数据库“testuser”…如果需要创建数据库,可以使用命令行中的
createdb
语句。您只需将访问凭据作为参数传递即可。小心!使用
template1
进行初始连接不是一个好主意,因为它应该用作创建新数据库的默认模板。如果存在到此数据库的活动连接,则没有人可以创建新数据库。@IgorPomaranskiy我们仍然可以使用
create database somedb TEMPLATE template0
createdb zzz
创建数据库<代码>psql-DZZZ-U维多利亚<代码>\l<代码>\c。如果以后要删除它,请使用
dropdb zzz
,或者将其保留为psql连接的默认“虚拟”db。
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