次のSQL文でテーブルを作成し、10行のデータを挿入した。 CREATE TABLE test(id INTEGER PRIMARY KEY, val INTEGER); ここで、次のSELECT文を実行したが、9行しか返されなかった。 SELECT * FROM test WHERE val >= 0 OR val < 0; 10行を挿入したはずなのに、合わせて9行しかないのはなぜか。以下の空欄に入る言葉を答えよ。
CREATE TABLE test (id INTEGER, val TEXT); INSERT INTO test(id, val) VALUES (1, 'aaa'), (2, 'bbb'); BEGIN; INSERT INTO test(id, val) VALUES (3, 'ccc'), (4, 'ddd'), (5, 'eee'); SAVEPOINT S1; UPDATE test SET val = 'CCC' WHERE id = 3; SAVEPOINT S2; DELETE FROM test WHERE id IN (2, 4); ROLLBACK TO S2; INSERT INTO test(id, val) VALUES(6, 'fff'), (7, 'ggg'); COMMIT;
CREATE TABLE public.sample(val TEXT); INSERT INTO public.sample(val) VALUES(‘This is public’); CREATE TABLE foo.sample(val TEXT); INSERT INTO foo.sample(val) VALUES(‘This is foo’); CREATE TABLE bar.sample(val TEXT); INSERT INTO bar.sample(val) VALUES(‘This is bar’); SET search_path TO “$user”,bar,public; SELECT * from sample;
This is foo, This is bar, This is public の3行が返される。
INSERT INTO foo (n) VALUES (3); というINSERT文が実行された時に、テーブルfooではなく、テーブルbarにINSERTされる、つまり内部的に INSERT INTO bar (n) VALUES (3); が実行されるようにしたい。 CREATE RULE foobar AS ON INSERT TO foo DO INSTEAD INSERT INTO bar (n) VALUES (___.n); というルールを作成することで、これが実現できるが、下線部に入る文字列は何か。