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语句应该触发。请帮我写下插入语句或存储过程。
答案 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);