data type 襷讌 朱, trigger 蠍磯 觧.

drop table test_child1;
drop table test_child2;
drop table test_parent;

--覿覈 企
create table test_parent(
	id int
,	logs json
,	src text
);

--企: 一 豢螳
create table test_child1(check(id = 1)) inherits (test_parent);
create table test_child2(check(id = 2)) inherits (test_parent);

--碁Μ蟇 
create or replace function test_insert_trigger()
returns trigger as
$$
declare logs json;
declare	ins_sql text;
begin
	logs := new.src;
	ins_sql='insert into test_child' ||new.id||'(id, logs) values('||new.id||', '''||new.src||''')';
	execute ins_sql;
	return null;
exception
	when others then
		ins_sql='insert into test_child' ||new.id||'(id, src) values('||new.id||', '''||new.src||''')';
		execute ins_sql;
		return null;
end;
$$ language plpgsql;

--碁Μ蟇
create trigger insert_test_trigger
    before insert on test_parent
    for each row execute procedure test_insert_trigger();

--ろ
insert into test_parent(id, src) values(1, '{"kr":"覩手記", "en":"KOREA"}');
insert into test_parent(id, src) values(1, '{"kr":"覩手記", "en":"KOREA"');

select * from test_parent;


--一  ?
select * from test_parent
where id = 1;

/*
"Append  (cost=0.00..20.38 rows=5 width=68)"
"  ->  Seq Scan on test_parent  (cost=0.00..0.00 rows=1 width=68)"
"        Filter: (id = 1)"
"  ->  Seq Scan on test_child1  (cost=0.00..20.38 rows=4 width=68)"
"        Filter: (id = 1)"
*/

--一 
alter table test_child1 no inherit test_parent;

select * from test_parent
where id = 1;
--0 rows

--drop table test_child1