如何在触发插入查询

时间:2017-10-26 09:25:57

标签: sql postgresql stored-procedures

my_Image 表格说明

name    characterVarying(30),
image    oid,
mime_type charactervarying(30)

pg_largeobject 表格说明

loid oid

我的查询:

insert into myImage values('myImage', lo_from_bytea(999999,decode('RRRXFFDF','base64')),'jpg');

之前我想在postgres中触发我的查询。我想确保在表pg_largeObject中,这个值999999不会出现在postgres中。那么请你帮我写一下我的插入声明。如果不存在loid那么只有我的insert语句应该触发。请帮我写下插入语句或存储过程。

2 个答案:

答案 0 :(得分:1)

insert into myImage select 'myImage', lo_from_bytea(999999,decode('RRRXFFDF','base64')),'jpg' 
where not exists (
  select null from pg_largeObject where loid=999999
);

请注意,在select null部分NULL中无关紧要 - 如果存在行,则可以返回任何值。

还要注意这个解决方案可能会在高度并发的系统上失败,因为子查询不是原子的

答案 1 :(得分:0)

Vao Tsun在select语句中稍作修改:

插入myImage select' myImage',lo_from_bytea(999999,decode(' RRRXFFDF',' base64')),' jpg' where not exists(从* pg_largeObject中选择*,其中loid = 999999);