我正在处理一个需要在多个模式上使用hstore
的项目。“public”模式,即安装hstore
扩展的地方,并不是所有地方都可用,因为我的作用域没有在“public”上查找。在一些试验中,我在一个名为“hstore”的模式上创建了扩展,并在每个可用的作用域(搜索路径)上使用该模式。
基于此,我有几个问题:
- 只为扩展创建一个模式可以吗?还是在每个模式(如
customer_1
、customer_2
等)上创建扩展更好? - 在一个单独的模式中创建扩展会影响数据的存储位置吗?我使用多个模式来使备份/恢复更容易,并且真的不希望pg将我所有的
hstore
数据存储在单个模式的一个隐藏表中(就像blob的pg_large_objects
)。
2条答案
按热度按时间lkaoscv71#
不允许对每个数据库多次安装扩展。引用the manual on
CREATE EXTENSION
:请记住,扩展本身不被视为在任何模式中:扩展具有非限定名称,这些名称必须在数据库范围内唯一。但是属于扩展的对象可以在架构内。
如果您不想在
search_path
中包含public
,请将“公共”扩展安装到专用架构中(例如:我会对所有这些扩展使用一个模式,而不是对每个扩展使用一个单独的模式。CREATE EXTENSION
提供了一个选项,可以安装到您选择的现有架构:并确保模式包含在可能要使用它的用户的
search_path
中。数据存储完全不受扩展所在的模式的影响。
e5nqia272#
尝试在所有方案上安装扩展hstore