是否应始终在SQL语句中显式定义模式?

时间:2009-03-17 15:55:59

标签: sql postgresql schema

早些时候我曾问过这个问题:

Where (or how) should I define the schema in a select statement when using PostgreSQL?

我接受的答案是修改连接用户的search_path,以便不需要在SQL中指定架构。但是,现在我想知道是否应该始终在SQL中指定架构,而不是允许搜索路径自动推断架构。这似乎是一种更安全的方法,并且可以更容易地移植到其他数据库。

这个问题与前一个问题的不同之处在于我想知道在SQL中定义模式的最佳实践,而不是如何完成。

是否应始终在SQL语句中显式定义模式?

**注意:我不会对模式名称进行硬编码,但允许通过Web.config文件对其进行配置,以便模式可以从一个安装更改为另一个安装。 **

2 个答案:

答案 0 :(得分:2)

将架构硬编码到SQL语句中是一种不好的做法。

您应该将其保留在应用程序设置中,并在连接到数据库后发出SET search_path

如果您的应用程序由具有自己架构的多个用户使用,那么如果您不将架构名称硬编码到SQL,您的生活会更容易。

换句话说,

string query = "SELECT * FROM " + ConfigurationManager.AppSettings.Get("schema") + ".table";

是一种糟糕的方式;

SQLCommand("SET search_path = " + ConfigurationManager.AppSettings.Get("schema"), connection).ExecuteNonQuery();
string query = "SELECT * FROM table";

是个好方法。

答案 1 :(得分:0)

让我们看看 - 在我维护的应用程序的数据库中,有大约十几个模式。如果我把它们放在“search_path”中会是什么命令?我会在配置中输入模式名称(不是表名而不是完全限定的表名)吗?

正如您现在所猜测的那样,我不使用“search_path”。但也许你可以在配置中存储完全限定的表名,以防你改变你对模式名称或表本身的想法。