2011-05-27 107 views
8

我正在使用Play构建Web应用程序!将Vertica数据库作为后端。 Vertica的JDBC连接字符串包含服务器和数据库名称,但我的表位于特定模式下(称为“dev_myschema”)。因此,我应该将我的表格称为“dev_myschema.mytable”。在生产模式中也有所有这些表的精确副本(比如说“prod_myschema”)和真实数据。为Vertica数据库设置默认架构

我想在配置文件中设置这个模式名,这样就很容易在这两个模式之间切换。现在,我在助手类中有一个getConnection方法,它执行DB.getConnection()并将配置的模式设置为该连接对象的默认模式。然而,这同样不利于其他模型类,它与其实体注释一起被提及(@Entity @Table(name = dev_myschema.mytable))

有没有一种方法可以指定模式名称配置文件并通过连接方法以及模型注释读取它?

谢谢。

+0

我试图让jpa与vertica一起工作。你会发布你的持久性和数据源配置吗?我只是无法让它工作。 – Laures 2011-09-28 07:01:48

+1

@Laures - 我在Play框架中使用它,并将其配置为像Postgres方言那样考虑Vertica数据库。 FWIW,这里是配置参数_'jpa.dialect = org.hibernate.dialect.PostgreSQLDialect'_ – Ananth 2011-10-19 12:44:15

+0

两星期前它使用基于postgres的自定义方言工作。 hbm2ddl不适用于我的(旧)模型,因为它使用datatypse,不支持vertica(smallint到int4是默认的,vertica不知道int4 ...)。仍然感谢您的答案。 – Laures 2011-10-19 14:06:54

回答

1

据我所知(我刚刚扫描了4.1.7文档),目前还没有办法将模式设置为默认模式。

0

根据sql指南默认架构是在您的搜索树中找到的第一个架构。也许你可以利用它并确保首先找到你的副本。

0

我处理这个问题的方式是通过执行“设置搜索路径”命令,如果我正在使用我的开发模式。所以,只要在创建Vertica的连接对象,执行以下命令:

"set search path to dev_myschema" 

在我的应用程序的代码,我只是有我的Vertica的对象检查环境/配置变量,而如果“开发模式”设置在建立连接时执行该语句。我的生产配置没有这个设置,所以在这种情况下,它只会使用默认模式,并且不会每次都执行该语句的额外开销。

6

尤金觉得它几乎正确,但错过了下划线。正确的Vertica的SQL语法来设置默认的模式是:

set search_path to dev_myschema 

正如尤金建议,如果您使用的是低级别的JDBC,只要你创建Connection对象,你可以这样做:

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

在7.0中,管理员可以通过发出以下命令将其设置为用户级别:

alter user user_name search_path schema1,schema2;