11

我正在开发一个需要hstore在多个模式上使用的项目。安装扩展的“公共”模式hstore并非在任何地方都可用,因为我的范围不会在“公共”处查找。在一些试验中,我在名为“hstore”的模式上创建了扩展,并在每个可用范围(搜索路径)上使用了该模式。

基于此,我有一些问题:

  • 是否可以仅为扩展创建架构?还是在每个模式上创建扩展名更好(例如,,,customer_1等等customer_2......)?

  • 在单独的模式中创建扩展是否会影响数据的存储位置?我正在使用多个模式来更轻松地备份/恢复,并且真的不希望 pg 将我的所有数据存储在单个模式上hstore的隐藏表(如blob)中。pg_large_objects

4

2 回答 2

11

不允许每个数据库多次安装扩展。引用手册CREATE EXTENSION

请记住,扩展本身不被视为在任何模式中:扩展具有非限定名称,在数据库范围内必须是唯一的。但是属于扩展的对象可以在模式中。

如果您不想包含public在 中search_path,请将“公共”扩展安装到专用架构中(例如:)extensions。我会为所有这些使用一个模式,而不是为每个扩展使用单独的模式。其中有不少。 CREATE EXTENSION提供安装到您选择的现有架构的选项:

    CREATE EXTENSION hstore SCHEMA extensions;

并确保架构包含在search_path可能想要使用它的用户中。

数据存储完全不受扩展所驻留的架构的影响。

于 2013-10-02T21:06:24.230 回答
0

试试这个在所有模式上安装扩展 hstore

create extension hstore schema pg_catalog;
于 2017-04-18T10:56:55.270 回答