我试图运行以下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?


当前回答

我尝试了所有的好答案(upvote > 10),但都不行。

我在pgAdmin4中遇到了这个问题。

所以我的解决方案很简单:

找到目标表/方案。 单击鼠标右键,单击:query-tool 在这个新的查询工具窗口中,您可以在不指定set search_path到<SCHEMA_NAME>的情况下运行SQL; 你可以看到结果:

其他回答

最简单的解决方法是将表名和所有列名改为小写,您的问题将得到解决。

例如:

将Table_Name更改为Table_Name和 修改“ColumnName”为“ColumnName”

如果表名包含下划线或大写,则需要用双引号将其括起来。

SELECT * from "Table_Name";

你必须先添加模式。

SELECT * FROM place.user_place;

如果你不想在所有查询中添加这个,那么试试这个:

SET search_path TO place;

现在它将工作:

SELECT * FROM user_place;

试试这个:SCHEMA_NAME。TABLE_NAME

这对一些人来说可能是愚蠢的,但在我的情况下-一旦我创建了表,我就可以在同一会话上查询表,但如果我重新登录新的会话表不退出。

然后我在创建表后使用commit,现在我可以在新会话中查找和查询表。是这样的:

select * from my_schema.my_tbl;

希望这能帮助到一些人。