1

いくつかのテーブルを作成しているときに本当に単純なエラーが発生しました。おそらく私が愚かであるだけですが、ここに投稿して並べ替えたいと思います。

Postgresql を使用しています。

(このテーブルは多くのテーブルの 1 つにすぎませんが、問題を引き起こしているのはこのテーブルです)

CREATE TABLE Ticket
(
    ID      INTEGER NOT NULL PRIMARY KEY,
    Problem VARCHAR(1000),
    Status  VARCHAR(20) NOT NULL DEFAULT 'open', 
    Priority    INTEGER NOT NULL,
    LoggedTime  TIMESTAMP NOT NULL,
    CustomerID  INTEGER NOT NULL,
    ProductID   INTEGER NOT NULL,
    FOREIGN KEY (ProductID) REFERENCES Product(ID),
    FOREIGN KEY (CustomerID) REFERENCES Customer(ID),
    CHECK (status='open' OR 'closed' AND priority =  1 OR 2 OR 3)
);

エラー:

エラー: ブール型の入力構文が無効です: "closed"

また、誰かが私にCHECKを行うためのより良い方法を教えてくれれば:

CHECK (status='open' OR 'closed' AND priority =  1 OR 2 OR 3)

それなら本当にありがたいです!

4

2 に答える 2

3

使用する

CHECK (Status IN ('open','closed') AND Priority IN (1,2,3))

使用することもできます

(Status ='open' OR  Status ='closed') AND
      (Priority =  1 OR Priority =  2 OR Priority =  3)
于 2012-04-08T16:11:47.090 に答える
2

2 つの制約の方が良いと思います: 粒度を上げると、ユーザーにより意味のあるフィードバックを提供できるようになります。つまり、ユーザーはStatus値を修正する必要がありますかPriority、それとも問題は値ですか? 各制約に意味のある名前を付けると、「フロントエンド」のコーダーがこの例で役立ちます。

...
CONSTRAINT ticket_status__invalid_value
    CHECK ( Status IN ( 'open' , 'closed' ) ), 
CONSTRAINT ticket_priority__invalid_value 
    CHECK ( Priority IN ( 1 , 2 , 3 ) ), 
...
于 2012-04-10T09:42:51.153 に答える