insert - リレーションにタプルを挿入します
insert into classname
[(att.expr-1 [,att_expr.i] )]
{values (expression1 [,expression-i] ) |
select [distinct]
expression1 [,expression-i]
[from from-list] [where qual]
[group by attr_name1 {, attr_name-i....}]
[union {all} select ...]
insert は制限句qualを満たすインスタンスをclassnameに加えます。classnameは既存のクラスの名前でなくてはなりません。ターゲットリストはclassname に加えられるフィールドの値を指定します。つまり、各att_exprがフィールド(属性名もしくは属性名と配列の指定)を指定して、そこに関連するexpressionがあてがわれます。ターゲットリストのフィールドはどんな並びになっていてもかまいません。結果のクラスのフィールドでターゲットリストに現れないものについてはデフォルトで NULL が入ります。もし各フィールドへの expression が正しいデータ型でなければ、自動的に型の強制が試されます。
配列の初期化は次のフォームのどれかを取ることができます:
-- -- 各次元の下位と上位のインデックスを指定します -- att_name[lIndex-1:uIndex-1]..[lIndex-i:uIndex-i] = array_strここで、lIndexもしくはuIndexは定数の整数で、array_strは定数の配列です。(pgintro(1) を参照してください。)
-- -- 各次元の上位のインデックスのみを指定します -- (各下位インデックスはデフォルトで 1になります) -- att_name[uIndex-1]..[uIndex-i] = array_str
-- -- array_str で指定される上位インデックスを使います -- (各下位インデックスはデフォルトで 1になります) -- att_name = array_str
もしユーザが配列の限界を指定しなければ( 3つ目のフォームにあるように)、Postgres はarray_strの定数から実際の配列の限界を推測します。
もしユーザがはっきりした配列の限界を指定すれば(最初と2番目のフォームにあるように)、配列は部分的あるいは全体的にC のような配列初期化の文法を使って初期化がされます。しかし、初期化されていない配列の要素はゴミを含むことになります。
クラスに追加をするためには、そのクラスの書き込み権限がなくてはなりません。また同様に、ターゲットリストあるいは制限句で値を読み込むクラスへの読み込み権限もなくてはなりません。(acl(l) を参照してください)
--
-- Smith のために働く新しい従業員 Jones を作ります
--
insert into emp
select newemp.name, newemp.salary,
Smith, 1990-newemp.age
from newemp
where name = Jones
--
-- newemp1 から newemp クラスへの挿入をします
--
insert into newemp
select * from newemp1
--
-- 3目並べのための空の 3x3 のゲーム盤を作ります
-- (これらの問い合わせは同じ盤属性を作ります)
--
insert into tictactoe (game, board[1:3][1:3])
values(1,'{{,,},{},{,}}')
insert into tictactoe (game, board[3][3])
values (2,'{}')
insert into tictactoe (game, board)
values (3,'{{,,},{,,},{,,}}')