Jay*_*ins 10 postgresql insert json postgresql-9.5
是否可以INSERT从SELECT语句DEFAULT中将值放入 PostgreSQL 表并使用空列的值?
就我而言,该SELECT语句是从 JSON 中选择的。
在下面的尝试中,我通过显式检索序列取得了成功,但我希望有一种方法可以使用 DEFAULT 值进行 INSERT。或者选择 DEFAULT 值而不必显式调用默认函数。
-- Example table
create table animals
(
id serial,
nm character varying (30) NOT NULL, --name
typ character varying(10),
tvi integer,
tvf numeric(8,3)
);
insert into animals VALUES (DEFAULT,'mouse','m',4,12.45);
select row_to_json(a) from animals a;
select * from json_populate_record(null::animals,'{"id":null,"nm":"mouse","typ":"m","tvi":4,"tvf":12.450}');
--All good.
-- Attempt #1
INSERT INTO animals
select id ,nm,typ,tvi,tvf from json_populate_record(null::animals,'{"id":null,"nm":"mouse","typ":"m","tvi":4,"tvf":12.450}');
/*
ERROR: null value in column "id" violates not-null constraint
DETAIL: Failing row contains (null, mouse, m, 4, 12.450).
********** Error **********
ERROR: null value in column "id" violates not-null constraint
SQL state: 23502
Detail: Failing row contains (null, mouse, m, 4, 12.450).
*/
-- Attempt #2
INSERT INTO animals
select DEFAULT,nm,typ,tvi,tvf from json_populate_record(null::animals,'{"id":null,"nm":"mouse","typ":"m","tvi":4,"tvf":12.450}');
/* I didn't expect this to work, but it does illustrate what I am trying to accomplish
ERROR: syntax error at or near "DEFAULT"
LINE 2: select DEFAULT,nm,typ,tvi,tvf from json_populate_record(null...
^
********** Error **********
ERROR: syntax error at or near "DEFAULT"
SQL state: 42601
Character: 28
*/
-- Attempt #3
INSERT INTO animals
select nextval('animals_id_seq'::regclass),nm,typ,tvi,tvf from json_populate_record(null::animals,'{"id":null,"nm":"mouse","typ":"m","tvi":4,"tvf":12.450}');
/* This works, but I'm hoping for a way to accomplish this without knowing the underlying functions generating the default values.
Query returned successfully: one row affected, 11 msec execution time.
*/
select version(); --'PostgreSQL 9.5.1, compiled by Visual C++ build 1800, 64-bit'
Run Code Online (Sandbox Code Playgroud)
如果在 Tablename 之后添加所有 ColumnsNames(不包括 'id' 列),则会自动插入序列,如:
INSERT INTO animals(nm,typ,tvi,tvf) select nm,typ,tvi,tvf from json_po.....
Run Code Online (Sandbox Code Playgroud)
您还可以添加一个缺省值在您的专栏,设置一个默认值,如果列不是在插入列列表。
| 归档时间: |
|
| 查看次数: |
13008 次 |
| 最近记录: |