2011-05-27 12 views
8

¡Estoy creando una aplicación web usando Play! con la base de datos Vertica como back-end. La cadena de conexión JDBC para Vertica contiene el servidor y el nombre de la base de datos, pero mis tablas están bajo un esquema específico (digamos "dev_myschema"). Por lo tanto, debería referirme a mi tabla como "dev_myschema.mytable". También hay una copia exacta de todas estas tablas en un esquema de producción (digamos "prod_myschema") con datos reales.Configuración del esquema predeterminado para la base de datos de Vertica

Me gustaría establecer este nombre de esquema en el archivo de configuración para que sea fácil cambiar entre estos dos esquemas. Por ahora, tengo un método getConnection en una clase auxiliar, que hace DB.getConnection() y establece el esquema configurado como el esquema predeterminado para ese objeto de conexión. Sin embargo, la misma no ayuda en otras clases del modelo en el que se menciona, junto con su anotación Entidad (@Entity @Table (nombre = dev_myschema.mytable))

¿Hay un camino por el cual puedo especificar el nombre de esquema en el archivo de configuración y que se lea por el método de conexión, así como las anotaciones del modelo?

Gracias.

+0

estoy tratando de conseguir la APP para trabajar con Vertica. ¿Publicaría su configuración de persistencia y fuente de datos? Simplemente no puedo hacer que funcione. – Laures

+1

@Laures - Lo estoy usando con Play framework y lo configuré considerando la base de datos de Vertica como un dialecto de Postgres. FWIW, aquí está el parámetro de configuración _'jpa.dialect = org.hibernate.dialect.PostgreSQLDialect'_ – Ananth

+0

que funcionó hace dos semanas con un dialecto personalizado basado en postgres. hbm2ddl no funcionó para mi modelo (antiguo) ya que usaba datatypse que no era compatible con vertica (smallint a int4 es el predeterminado, vertica no conoce int4 ...). aún gracias por la respuesta. – Laures

Respuesta

1

Por lo que yo sé (y acabo de escanear la documentación 4.1.7), no hay manera de establecer un esquema como predeterminado.

0

Según la guía sql, el esquema predeterminado es el primero que se encuentra en el árbol de búsqueda. tal vez podrías explotar eso y asegurarte de que tu copia se encuentre primero.

0

El modo en que manejo este problema es mediante la ejecución de un comando "establecer ruta de búsqueda" si estoy usando mi esquema de desarrollo. Así, tan pronto como se crea el objeto de conexión Vertica, ejecute el siguiente comando:

"set search path to dev_myschema" 

En mi código de la aplicación, sólo tengo mi objetivo Vertica comprobar una variable de entorno/config, y si el "esquema dev" el establecimiento está presente, ejecuta esa declaración al establecer la conexión. Mi configuración de producción no tiene esa configuración, por lo que solo usará el esquema predeterminado en ese caso y no incurrirá en la sobrecarga adicional de ejecutar esa declaración cada vez.

6

Eugene lo consiguió casi correcto, pero le faltaba un guión bajo. La sintaxis correcta Vertica SQL para establecer el esquema por defecto es:

set search_path to dev_myschema 

Como sugiere Eugene, si está utilizando de bajo nivel JDBC, tan pronto como se crea el objeto de conexión que puede hacer:

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

7.0, el administrador puede programar a nivel de usuario mediante la emisión por debajo de comando:

alter user user_name search_path schema1,schema2; 
Cuestiones relacionadas