2012-01-13 13 views
1

custom domainにNULL値を受け取る方法を理解できないようです。通知は、私はそれをさまざまな方法を試してみたくそと笑いのために:NULLを受け入れるDOMAINを作成するにはどうすればよいですか?

DROP SCHEMA census CASCADE; 
CREATE SCHEMA census; 
-- FIRST FOUR METHODS: NULL before CHECK, in CHECK, and NULL after CHECK 
CREATE DOMAIN census.sex AS text NULL CHECK (VALUE IN ('M', 'F', 'NULL') OR VALUE IS NULL) NULL; 
CREATE TABLE census.names (
    name  text 
    , freq  int 
    , cumfreq float 
    , rank  float 
    , is_last bool 
    , sex  census.sex NULL -- fourth way 
    , PRIMARY KEY (is_last, sex, name) 
); 

しかし、まだ運...

もっと面白いこと
# \d census.names; 
      Table "census.names" 
Column |  Type  | Modifiers 
---------+------------------+----------- 
name | text    | not null 
freq | integer   | 
cumfreq | double precision | 
rank | double precision | 
is_last | boolean   | not null 
sex  | census.sex  | not null 
Indexes: 
    "names_pkey" PRIMARY KEY, btree (is_last, sex, name) 

を、the docs

NULL

を言います

このドメインの値はnullにすることができます。これがデフォルトです。

この句は、非標準のSQL データベースとの互換性を目的としています。新しいアプリケーションではその使用は推奨されません。

この節がなければ、まだNOT NULLと表示されます。

$ psql --version 
psql (PostgreSQL) 9.1.1 
contains support for command-line editing 

答えて

2

いつものように:

  1. ポストStackOverflowの上の記述問題IRCで
  2. リンク貼り付け:
  3. //irc.freenode.net/#postgresql内の質問に答えるために教祖を取得秒。

11:17 < RhodiumToad> EvanCarroll:それはそれをしない主キーだ - 主キーのすべての列が

nullではありません、彼はすべてを知っています。ここ

+2

右、私は同じ答えを作り上げる過程にありました。 –

+0

コメントがありますupvote - 私はすでにそれを持っていた場合誰も答えを書く時間を無駄にしたくなかった。 –

+0

私は不平を言っていない、あなたは正しいことをした。ちょうど確認したかった。 –

1

ワークス(PG 9.1):

 -- Domain with only values 1 ... 9 allowed, 
     -- used for both the {x,y,z} coordinates and the cell values. 
CREATE DOMAIN one_nine 
     AS INTEGER 
     CHECK (value >= 1 AND value <= 9) 
     ; 

CREATE DOMAIN one_nine_notnull 
     AS INTEGER NOT NULL 
     CHECK (value >= 1 AND value <= 9) 
     ; 

CREATE TABLE all_numbers 
     (val one_nine_notnull PRIMARY KEY 
     ); 
INSERT INTO all_numbers(val) 
SELECT nn FROM generate_series(1,9) AS nn; 

     -- Table containing exactly one sudoku puzzle. 
     -- The zzz coordinate (the "box number") is formally redundant 
     -- (since it is functionally dependant on {xxx,yyy}) 
DROP TABLE IF EXISTS sudoku3 CASCADE; 
CREATE TABLE sudoku3 
     (yyy one_nine_notnull 
     , xxx one_nine_notnull 
     , zzz one_nine_notnull 
     , val one_nine 
     ); 
INSERT INTO sudoku3 (yyy,xxx,zzz,val) VALUES (NULL, 3, 1, 4); 
INSERT INTO sudoku3 (yyy,xxx,zzz,val) VALUES (1, 3, 1, 14); 

     -- Conveniance view with 3-width horizontal and vertical bands 
CREATE VIEW v_sudoku AS (
     SELECT yyy,xxx,zzz 
     , val 
     , (xxx+2)/ 3 as x3 
     , (yyy+2)/ 3 as y3 
     FROM sudoku3 
     ) 
     ; 

     -- First constraint: (x,y) is unique 
ALTER TABLE sudoku3 ADD PRIMARY KEY (xxx,yyy); 

     -- Three constraints for unique values for {rows,columns,boxes} 
CREATE UNIQUE INDEX sudoku_xv ON sudoku3 (xxx,val); 
CREATE UNIQUE INDEX sudoku_yv ON sudoku3 (yyy,val); 
CREATE UNIQUE INDEX sudoku_zv ON sudoku3 (zzz,val); 

出力:

drop cascades to type w00t.one_nine_notnull 
drop cascades to table w00t.all_numbers 
drop cascades to table w00t.sudoku3 
drop cascades to view w00t.v_sudoku 
drop cascades to view w00t.sudoku_row 
drop cascades to view w00t.valid_moves 
drop cascades to view w00t.low_hanging_fruit 
drop cascades to view w00t.magic_moves 
drop cascades to function w00t.sudoku_magic() 
DROP SCHEMA 
CREATE SCHEMA 
SET 
CREATE DOMAIN 
CREATE DOMAIN 
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "all_numbers_pkey" for table "all_numbers" 
CREATE TABLE 
INSERT 0 9 
NOTICE: table "sudoku3" does not exist, skipping 
DROP TABLE 
CREATE TABLE 
ERROR: domain one_nine_notnull does not allow null values 
ERROR: value for domain one_nine violates check constraint "one_nine_check" 
CREATE VIEW 
NOTICE: ALTER TABLE/ADD PRIMARY KEY will create implicit index "sudoku3_pkey" for table "sudoku3" 
ALTER TABLE 
CREATE INDEX 
CREATE INDEX 
CREATE INDEX 
INSERT 0 81 
... 
関連する問題