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


当前回答

我在这方面遇到了问题,这就是故事(悲伤但真实):

如果你的表名都是小写的,比如:accounts 你可以使用:select * from AcCounTs,它会正常工作 如果你的表名都是小写的,比如:accounts 以下操作将失败: select * from "AcCounTs" 如果您的表名是混合大小写,如:Accounts 以下操作将失败: 从帐户中选择* 如果您的表名是混合大小写,如:Accounts 下面的操作就可以了: select * from "Accounts"

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

其他回答

我在OSX上遇到了类似的问题,但尝试使用双引号和单引号。对于您的情况,您可以尝试这样做

$query = 'SELECT * FROM "sf_bands"'; // NOTE: double quotes on "sf_Bands"

对我来说,问题是,当Django初始化时,我对那个特定的表使用了查询。当然,它会抛出一个错误,因为这些表并不存在。在我的例子中,它是admin.py文件中的get_or_create方法,当软件运行任何类型的操作(在本例中是迁移)时执行该方法。希望这能帮助到别人。

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

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

select * from my_schema.my_tbl;

希望这能帮助到一些人。

我也遇到了同样的问题,我使用的是PostgreSQL 10.5。 我尝试了上面的一切,但似乎没有工作。

然后我关闭pgadmin并为PSQL终端打开一个会话。 登录PSQL,分别连接数据库和模式:

\c <DATABASE_NAME>;
set search_path to <SCHEMA_NAME>;

然后,重新启动pgadmin控制台,然后我就可以在pagadmin的查询工具中正常工作了。

确保表名不包含任何尾随空格