我已经使用 postgresql 开发了一个应用程序,它运行良好。
现在我需要为同一个应用程序创建多个实例,但我只有一个数据库。所以我正在考虑使用模式,以便我可以将每个实例表分组到不同的模式中。
现在,我不想重写我所有的函数和脚本,因此我想知道是否可以使用一些指令来指示数据库在特定模式上操作。只是为了让它更清楚,你知道你什么时候在 c++
using namespace std;
这样您就可以使用cout
而不是std::cout
? 如果可能的话,我想使用类似的东西。
我已经使用 postgresql 开发了一个应用程序,它运行良好。
现在我需要为同一个应用程序创建多个实例,但我只有一个数据库。所以我正在考虑使用模式,以便我可以将每个实例表分组到不同的模式中。
现在,我不想重写我所有的函数和脚本,因此我想知道是否可以使用一些指令来指示数据库在特定模式上操作。只是为了让它更清楚,你知道你什么时候在 c++
using namespace std;
这样您就可以使用cout
而不是std::cout
? 如果可能的话,我想使用类似的东西。
您要查找的参数是search_path
- 列出查询将查找的模式。因此,您可以执行以下操作:
CREATE TABLE schema1.tt ...
CREATE TABLE schema2.tt ...
CREATE FUNCTION schema1.foo() ...
CREATE FUNCTION schema2.foo() ...
SET search_path = schema1, something_else;
SELECT * FROM tt; -- schema1.tt
SELECT * FROM schema2.tt -- schema2.tt
SELECT foo(); -- calls schema1.foo
SELECT schema2.foo(); -- calls schema2.foo
请注意,如果查询的计划保存在 foo() 的主体中,那么您可能会得到意想不到的结果。如果您使用重复表,我建议您始终明确列出 plpgsql 函数中引用表的模式。如果没有,请确保您已进行适当的测试以检查更改 search_path 的行为。
哦 - 你也可以为函数的主体显式设置 search_path - 有关详细信息,请参阅手册的 CREATE FUNCTION 参考。