8

Play! を使用して Web アプリケーションを作成しています。Vertica データベースをバックエンドとして使用します。Vertica の JDBC 接続文字列にはサーバーとデータベース名が含まれていますが、私のテーブルは特定のスキーマ (「dev_myschema」など) の下にあります。したがって、テーブルを「dev_myschema.mytable」と呼ぶ必要があります。これらすべてのテーブルの正確なコピーが本番スキーマ (「prod_myschema」など) にもあり、実際のデータが含まれています。

この 2 つのスキーマを簡単に切り替えられるように、このスキーマ名を構成ファイルに設定したいと思います。今のところ、DB.getConnection() を実行し、構成されたスキーマをその接続オブジェクトのデフォルト スキーマとして設定するヘルパー クラスに getConnection メソッドがあります。ただし、エンティティ注釈 (@Entity @Table(name=dev_myschema.mytable)) と共に言及されている他のモデル クラスでは、同じことは役に立ちません。

構成ファイルでスキーマ名を指定し、それを接続メソッドとモデル注釈で読み取る方法はありますか?

ありがとう。

4

5 に答える 5

7

Eugene はほぼ正解しましたが、アンダースコアがありませんでした。デフォルトのスキーマを設定する正しい Vertica SQL 構文は次のとおりです。

set search_path to dev_myschema

Eugene が提案したように、低レベルの JDBC を使用している場合は、接続オブジェクトを作成するとすぐに次のことができます。

conn.createStatement().executeUpdate("set search_path to " + schemaName);
于 2012-05-02T20:42:26.357 に答える
1

私が知る限り (4.1.7 のドキュメントをスキャンしたところです)、スキーマをデフォルトとして設定する方法はまだありません。

于 2011-08-30T18:52:52.343 に答える
0

7.0 では、管理者は以下のコマンドを発行してユーザー レベルで設定できます。

alter user user_name search_path schema1,schema2;
于 2014-07-01T22:03:12.260 に答える
0

この問題を処理する方法は、開発スキーマを使用している場合、「検索パスの設定」コマンドを実行することです。そのため、Vertica 接続オブジェクトが作成されたらすぐに、次のコマンドを実行します。

    "set search path to dev_myschema"

私のアプリケーション コードでは、Vertica オブジェクトに環境/構成変数をチェックさせ、「dev schema」設定が存在する場合は、接続の確立時にそのステートメントを実行します。私の運用構成にはその設定がないため、その場合はデフォルトのスキーマを使用するだけで、毎回そのステートメントを実行する追加のオーバーヘッドは発生しません。

于 2012-03-26T21:58:47.783 に答える
0

SQLガイドによると、デフォルトのスキーマは検索ツリーで最初に見つかったスキーマです。おそらく、それを悪用して、コピーが最初に見つかるようにすることができます。

于 2011-09-28T07:00:28.610 に答える