为Vertica数据库设置默认模式

8
我正在使用Play!和Vertica数据库作为后端构建Web应用程序。 Vertica的JDBC连接字符串包含服务器和数据库名称,但我的表位于特定模式下(例如“dev_myschema”)。因此,我应该将我的表称为“dev_myschema.mytable”。在生产模式下也有所有这些表的完全副本(例如“prod_myschema”),其中包含真实数据。
我想在配置文件中设置此模式名称,以便可以轻松地在这两个模式之间切换。目前,我在帮助类中有一个getConnection方法,它执行DB.getConnection()并将配置的模式设置为该连接对象的默认模式。然而,在其他模型类中也提到了它与其实体注释一起(@Entity @Table(name = dev_myschema.mytable)),同样不起作用。
是否有一种方法可以在配置文件中指定模式名称,并由连接方法以及模型注释读取?
谢谢。

我正在尝试让JPA与Vertica配合工作。你能否发布你的持久化和数据源配置?我就是无法让它工作起来。 - Laures
1
@Laures - 我正在使用Play框架,并将其配置为将Vertica数据库视为Postgres方言。顺便说一句,这是配置参数_jpa.dialect=org.hibernate.dialect.PostgreSQLDialect_。 - Ananth
两周前,我用基于Postgres的自定义方言使其正常工作。由于我的(旧)模型使用了Vertica不支持的数据类型,因此hbm2ddl无法工作(默认情况下将smallint转换为int4,而Vertica不知道int4...)。还是感谢您的回答。 - Laures
5个回答

7

Eugene几乎翻译正确,但缺少了一个下划线。设置默认模式的正确Vertica SQL语法为:

set search_path to dev_myschema

正如 Eugene 建议的那样,如果您正在使用低级 JDBC,一旦创建了 Connection 对象,可以执行以下操作:

conn.createStatement().executeUpdate("set search_path to " + schemaName);

1
据我所知(我刚才浏览了4.1.7的文档),目前还没有设置模式为默认模式的方法。

0

在7.0中,管理员可以通过下面的命令在用户级别上设置它:

alter user user_name search_path schema1,schema2;

0

根据SQL指南, 默认模式是在您的搜索树中找到的第一个。或许你可以利用这一点,确保你的副本被首先找到。


0

我处理这个问题的方式是,如果我正在使用我的开发模式,则执行“设置搜索路径”命令。因此,一旦创建了您的Vertica连接对象,请执行以下命令:

    "set search path to dev_myschema"

在我的应用程序代码中,我只需让我的Vertica对象检查一个环境/配置变量,如果存在“dev schema”设置,则在建立连接时执行该语句。我的生产配置没有该设置,因此在这种情况下它将仅使用默认模式,并且不会产生每次执行该语句的额外开销。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接