我试图运行以下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());
这会产生以下错误:
查询失败:ERROR:关系“sf_bands”不存在
在我能找到的所有例子中,有人得到一个错误,说明关系不存在,这是因为他们在表名中使用大写字母。我的表名没有大写字母。是否有一种方法来查询我的表不包括数据库名称,即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
从我所读到的,这个错误意味着您没有正确引用表名。一个常见的原因是,表定义为混合大小写拼写,并且您试图用所有小写字母查询它。
换句话说,以下是不成立的:
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