我正在尝试运行以下 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());
这会产生以下错误:
在所有示例中,我都可以找到有人收到错误说明该关系不存在的地方,这是因为他们在表名中使用了大写字母。我的表名没有大写字母。有没有办法在不包含数据库名称的情况下查询我的表,即
showfinder.sf_bands
? 最佳答案
根据我的阅读,此错误意味着您没有正确引用表名。一个常见的原因是该表是用大小写混合的拼写定义的,而您试图用所有小写字母来查询它。
换句话说,以下失败:
CREATE TABLE "SF_Bands" ( ... );
SELECT * FROM sf_bands; -- ERROR!
使用双引号分隔标识符,以便您可以在定义表时使用特定的大小写混合拼写。
SELECT * FROM "SF_Bands";
根据您的评论,您可以向“search_path”添加一个架构,这样当您引用表名而不限定其架构时,查询将通过按顺序检查每个架构来匹配该表名。就像 shell 中的
PATH
或 PHP 中的 include_path
等,您可以检查您当前的模式搜索路径:SHOW search_path
"$user",public
您可以更改架构搜索路径:
SET search_path TO showfinder,public;
另见 http://www.postgresql.org/docs/8.3/static/ddl-schemas.html
关于php - 不能简单地使用 PostgreSQL 表名 ("relation does not exist"),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/695289/