2017-02-12 5 views
0

"Review"テーブルで使用できる新しいドメイン "rating_int"を定義しようとしています。いつでも私は、このクエリを実行しようとすると、このメッセージが返されます。ドメインの作成エラー

ERROR:コラム "rating_intは"

存在しない**********エラー********* *

ERROR:「rating_int」欄は

SQL状態が存在しません:42703

を私はpostgresql exampleとまったく同じコードの形式を踏襲し、自分のコードがエラーを返している原因を私は知りません。

CREATE DOMAIN rating_int AS INTEGER 
CHECK(rating_int > 0 AND rating_int <=10); 

CREATE TABLE Review 
(
    paper_id INTEGER, 
    rv_email VARCHAR(55)  NOT NULL, 
    reccomendation TEXT, 
    a_comments TEXT, 
    c_comments TEXT, 
    technical_merit rating_int, 
    readability rating_int, 
    orginality rating_int, 
    relevance rating_int, 
    PRIMARY KEY(paper_id, rv_email), 
    FOREIGN KEY(paper_id) REFERENCES Paper 
    ON DELETE RESTRICT ON UPDATE CASCADE, 
    FOREIGN KEY(rv_email) REFERENCES Reviewer 
    ON DELETE SET NULL ON UPDATE CASCADE 
    ); 

答えて

1

ドメインの名前ではなくvalueを使用します。このように:

CREATE DOMAIN rating_int AS INTEGER 
    CONSTRAINT chk_rating_int CHECK (value > 0 AND value <= 10); 

あなたは、実際に、制約に名前を付ける必要はありません - あなたのエラーがrating_int代わりのvalueました。したがって、これは動作します:

CREATE DOMAIN rating_int AS INTEGER 
    CHECK (value > 0 AND value <= 10); 

しかし、私は制約名を与えることをお勧めします。

また、スペースを節約する場合は、タイプをsmallintまたはdecimal(2)にすることもできます。

+0

ありがとうございます、私のクエリは問題なく実行されました。なぜ私はドメインの名前ではなく、 'value'を使うことを期待していますか? – stargazer

+0

@ stargazer。 。 。それが構文の定義方法です。 –

関連する問題