不能简单地使用 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

原文由 Keyslinger 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 416
2 个回答

根据我的阅读,此错误意味着您没有正确引用表名。一个常见的原因是该表是用混合大小写的拼写定义的,而您尝试使用全部小写来查询它。

换句话说,以下失败:

 CREATE TABLE "SF_Bands" ( ... );

SELECT * FROM sf_bands;  -- ERROR!

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

 SELECT * FROM "SF_Bands";


关于您的评论,您可以将架构添加到“search_path”,这样当您引用表名而不限定其架构时,查询将通过按顺序检查每个架构来匹配该表名。就像 shell 中的 include_path PATH PHP 中的 等一样。您可以检查当前的模式搜索路径:

 SHOW search_path
  "$user",public

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

 SET search_path TO showfinder,public;

另见 http://www.postgresql.org/docs/8.3/static/ddl-schemas.html

原文由 Bill Karwin 发布,翻译遵循 CC BY-SA 2.5 许可协议

试试这个:SCHEMA_NAME.TABLE_NAME

原文由 Islam 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题