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

2024-05-22

我正在尝试运行以下 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在外壳或include_path在 PHP 等中,您可以检查当前模式搜索路径:

SHOW search_path
  "$user",public

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

SET search_path TO showfinder,public;

在这里阅读有关 search_path 的更多信息:https://www.postgresql.org/docs/current/ddl-schemas.html#DDL-SCHEMAS-PATH https://www.postgresql.org/docs/current/ddl-schemas.html#DDL-SCHEMAS-PATH

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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