2016-08-30 14 views
0

私の問題がScala Play 2.5.x FrameworkまたはPostgreSQLに接続しているかどうかは分かりませんので、セットアップについて説明します。PostgreSQLを使用するScala Playプロジェクトで 'public'スキーマをデフォルトにするには?

私はBigSQL SandboxesからScalaとPostgreSQL 9.5.4-2でPlay 2.5.6を使用しています。私は、Play Frameworkのデフォルトの進化パッケージを使用してDBのバージョンを管理しています。

私はBigSQL Sandboxの新しいデータベースを作成しました.PGSQLとPGSQLは、publicというデフォルトのスキーマを作成しました。私は開発のためにこのスキーマを使用します。

私は、次のスクリプト(DB進化configに1.sql)でテーブルを作成したいと思います:私はこのようなコードを使用してテーブルを読みたいもののほか

# Initialize the database 

# --- !Ups 

CREATE TABLE user (
    id SERIAL PRIMARY KEY, 
    name TEXT NOT NULL, 
    email TEXT NOT NULL, 
    creation_date TIMESTAMP NOT NULL 
); 

# --- !Downs 

DROP TABLE user; 

val resultSet = statement.executeQuery("SELECT id, name, email FROM public.user WHERE id=" + id.toString) 

上記のコードを実行したい場合や、pgadminでCREATE TABLE...コードを使用している場合でもエラーが発生します。問題はuserテーブル名にあります。プレフィックスにpublic(つまりpublic.user)を付けるとすべて正常に動作します。

私の質問は以下のとおりです。

  1. それはスキーマ名ごとに時間を持つテーブル名の前に付けるために正常ですか?私にとっては奇妙に思える。
  2. publicスキーマをデフォルトのオプションにすることで、テーブル名を修飾する必要はありません。 (例えば。正しくALTER database "my_database" SET search_path TO my_schema;
  3. search_path:私は私のデータベースのsearch_pathを設定ALTER USER my_user SET search_path to public;
    1. は、私は私のユーザーのためにsearch_pathを設定します。CREATE TABLE user (...);

    は、私は、次の試してみました)エラーをスローしません。これを示します:"$user",public

pgAdminでは p.a.d.e.DefaultEvolutionsApi - ERROR: syntax error at or near "user"
  • プレイで
    1. ERROR:構文でエラーまたは近くに "ユーザー"

      LINE 1:CREATE TABLEのユーザー(

      は、私は次のエラーを得ました

      ********** **********エラー

      ERROR:構文エラーまたはその付近 "ユーザー"

      SQL状態:42601

      文字:14

  • 答えて

    2

    これがデフォルトのスキーマとは何の関係もありません。 userは予約語です。

    あなたは、このようなテーブルを作成できるように二重引用符を使用する必要があります。

    CREATE TABLE "user" (
        id SERIAL PRIMARY KEY, 
        name TEXT NOT NULL, 
        email TEXT NOT NULL, 
        creation_date TIMESTAMP NOT NULL 
    ); 
    

    しかし、私は強くはそれをやってないことをお勧めします。引用符で囲まれた識別子を必要としない別の名前を探します。

    +0

    解決策でした。ありがとうございました!私はエラーメッセージがこの場合には本当に役に立たなかったと感じています。ちなみに、私はGoogleでこれを見つけられなかった理由を調べるために短い調査をしました。私は、 "create table user"というフェーズで検索していたはずです。そうすれば、私はあなたの他の答えを見つけることができました:http://stackoverflow.com/questions/22256124/cannot-create-a-database-table-named-user-in-postgresql :)私は "user_account"という名前で行きました。 –

    関連する問題