为什么我需要在SELECT子句中指定数据库模式,当只有一个" public"架构?

时间:2017-11-24 11:45:57

标签: database postgresql

我正在开发连接到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 + " = ?;";

这是什么原因,我怎么能避免使用架构前缀?

0 个答案:

没有答案