我正在尝试运行以下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());
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
查询失败:错误:关系"sf_bands"不存在
在所有的例子中,我可以找到有人得到错误的地方,说明关系不存在,这是因为他们在表名中使用大写字母.我的表名没有大写字母.有没有办法查询我的表而不包括数据库名称,即showfinder.sf_bands?
我正在编写一个Java自动构建和运行SQL查询的应用程序.对于许多表我的代码工作正常,但在某个表上它会因抛出以下异常而卡住:
Exception in thread "main" org.postgresql.util.PSQLException: ERROR: column "continent" does not exist
Hint: Perhaps you meant to reference the column "countries.Continent".
Position: 8
Run Code Online (Sandbox Code Playgroud)
已运行的查询如下:
SELECT Continent
FROM network.countries
WHERE Continent IS NOT NULL
AND Continent <> ''
LIMIT 5
Run Code Online (Sandbox Code Playgroud)
这实质上5从列中返回非空值.
我不明白为什么我在pgAdmin 4中明显地出现"列不存在"错误.我可以看到有一个名称Network包含表的模式countries,该表有一个名称Continent与预期一样的列.
由于应用程序本身检索了所有列,模式和表名称,我认为没有拼写或语义错误,为什么PostgreSQL会导致问题呢?在pgAdmin4中运行查询也不使用建议countries.Continent的工作.
我的PostgreSQL版本是迄今为止的最新版本:
$ psql --version
psql (PostgreSQL) 9.6.1
Run Code Online (Sandbox Code Playgroud)
如何成功运行查询?
新鲜的postgres安装,db'test',表'Graeber'是从另一个程序创建的.
我想看看'Graeber'表的内容.当我连接到数据库并尝试选择'Graeber'的内容时,应用程序告诉我:ERROR: relation "graeber" does not exist.
看截图:

这有什么不对?
我试图使用PostgreSQL的currval函数来返回一个名为的表的最后插入行id Concept. Concept有一个串行主键调用,cid并有一个自动生成的序列调用Concept_cid_seq.
我尝试以下语句并得到一个错误:
SELECT currval("Concept_cid_seq");
ERROR: column "Concept_cid_seq" does not exist
LINE 1: SELECT currval("Concept_cid_seq");
^
********** Error **********
ERROR: column "Concept_cid_seq" does not exist
SQL state: 42703
Character: 16
Run Code Online (Sandbox Code Playgroud)
但是当我运行查询时:
SELECT * from "Concept_cid_seq";
Run Code Online (Sandbox Code Playgroud)
我得到一个有一行的表(正如我所料)显示了像last_value,start_value等列...
我在这里错过了什么?我是否将错误的信息传递给了currval?为什么说'专栏不存在?'
我已经能够将PostgreSQL链接到java.我已经能够显示表中的所有记录,但是我无法执行删除操作.
这是我的代码:
con = DriverManager.getConnection(url, user, password);
String stm = "DELETE FROM hostdetails WHERE MAC = 'kzhdf'";
pst = con.prepareStatement(stm);
pst.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
请注意,MAC是一个字符串字段,用大写字母书写.该字段确实存在于表中.
我得到的错误:
严重:错误:列"mac"不存在