我正在开发连接到PostrgreSQL 10 DB的小型软件应用程序的数据库组件。我正在重用我以前的数据库应用程序中的一些代码,这些代码工作得很好,但令我惊讶的是,我遇到了一个有趣的问题。特别声明:
SELECT * FROM <table_name> WHERE <column_name>='test';
不再有效。相反,我得到一个&#34; 关系 table_name 不存在&#34; Postgres的错误。
当然,该关系确实存在,并且可以与我用于连接的用户访问。
将上述查询更改为:
SELECT * FROM public."<table_name>" WHERE <column_name>='test';
工作正常。请注意,表名是小写,我在查询中使用小写正确指定它,因此消除了案例问题。
我尝试按其他用户的建议设置search_path
:
SET search_path TO public;
无济于事。现在我明白在某些情况下必须指定模式名称,但在我之前的任何数据库模型中,这都是从不的情况,而且上面的第一个查询总是有效。我不明白为什么我必须在我的DAO代码中使用模式名称为所有查询添加前缀。
特别是,用于查询数据库的Java代码变得更加严重&#34;脏&#34;:
String selectQuery = "SELECT * FROM public.\"" + TABLE_NAME + "\" WHERE " + COLUMN_NAME + " = ?;";
这是什么原因,我怎么能避免使用架构前缀?