不能简单地使用PostgreSQL表名(“关系不存在”)

我正在尝试运行以下PHP脚本来执行简单的数据库查询:

$db_host = "localhost";

$db_name = "showfinder";

$username = "user";

$password = "password";

$dbconn = pg_connect("host=$db_host dbname=$db_name user=$username password=$password")

or die('Could not connect: ' . pg_last_error());

$query = 'SELECT * FROM sf_bands LIMIT 10';

$result = pg_query($query) or die('Query failed: ' . pg_last_error());

这将产生以下错误:

查询失败:错误:关系“ sf_bands”不存在

在所有示例中,我都能找到有人指出该关系不存在的错误,这是因为他们在表名中使用大写字母。我的表格名称没有大写字母。有没有一种方法可以查询我的表而不包含数据库名称,即showfinder.sf_bands

回答:

从我所读的内容来看,此错误表示您未正确引用表名。一个常见的原因是该表是使用大小写混合的拼写定义的,而您正在尝试使用所有小写字母对其进行查询。

换句话说,以下操作失败:

CREATE TABLE "SF_Bands" ( ... );

SELECT * FROM sf_bands; -- ERROR!

使用双引号分隔标识符,以便在定义表时使用特定的大小写混合拼写。

SELECT * FROM "SF_Bands";


作为您的注释,您可以将架构添加到“

search_path”,以便在引用表名而不限定其架构时,查询将通过按顺序检查每个架构来匹配该表名。就像PATH在Shell或include_pathPHP中一样。您可以检查当前的架构搜索路径:

SHOW search_path

"$user",public

您可以更改架构搜索路径:

SET search_path TO showfinder,public;

以上是 不能简单地使用PostgreSQL表名(“关系不存在”) 的全部内容, 来源链接: utcz.com/qa/416392.html

回到顶部