为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

PHP
慕盖茨1488219 2019-10-12 16:07:44

不能简单地使用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_band”不存在


在我能找到的所有例子中,有人在哪里得到一个错误,说明这个关系不存在,这是因为他们在表名中使用大写字母。我的表名没有大写字母。是否有一种方法可以查询我的表而不包括数据库名称,即showfinder.sf_bands?


查看完整描述

3 回答

?
忽然笑

据我所读,此错误意味着您没有正确引用表名。一个常见的原因是,表是用混合大小写拼写定义的,并且您试图使用所有小写查询它。

换句话说,以下情况失败了:

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;

另见http:/www.postgresql.org/docs/8.3/静力/DDL-schemas.html



查看完整回答
反对 回复 2019-10-13
?
蓝山帝景

我有问题,这是一个故事(悲伤但真实):

  1. 如果您的表名都是小写(如:Account),则可以使用:select * from AcCounTs它会运作的很好

  2. 如果您的表名都是小写,如下所示:accounts下列情况将失败:select * from "AcCounTs"

  3. 如果您的表名是混合大小写,如下所示:Accounts下列情况将失败:select * from accounts

  4. 如果您的表名是混合大小写,如下所示:Accounts以下内容将正常工作:select * from "Accounts"

我不喜欢记住这种无用的东西,但你必须记住;)



查看完整回答
反对 回复 2019-10-13
?
慕田峪7331174

将dbName参数放入连接字符串中。它对我有效,而其他一切都失败了。

同样,在执行选择时,请指定your_schema.your_table就像这样:

select * from my_schema.your_table


查看完整回答
反对 回复 2019-10-13

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信