2016-08-02 49 views
1

我有bytea字段的表。当我尝试从此表中删除一行时,出现此类错误:无法更新或删除表格中的行(Postgres)

[42704] ERROR: large object 0 does not exist 

你能帮我解决这种情况吗?

编辑。从命令\d photo信息:

Table "public.photo" 
    Column |   Type   | Modifiers 
------------+------------------------+----------- 
id   | character varying(255) | not null 
ldap_name | character varying(255) | not null 
file_name | character varying(255) | not null 
image_data | bytea     | 
Indexes: 
    "pk_photo" PRIMARY KEY, btree (id) 
    "photo_file_name_key" UNIQUE CONSTRAINT, btree (file_name) 
    "photo_ldap_name" btree (ldap_name) 
Triggers: 
    remove_unused_large_objects BEFORE DELETE OR UPDATE ON photo FOR EACH ROW EXECUTE PROCEDURE lo_manage('image_data') 
+0

在psql的执行'\ d photo'并显示结果(编辑的问题)。 – klin

+0

您似乎对大型物体感到困惑。你的字段类型是'bytea'类型的'image_data',但是你也想把它看作像'pg_largeobject'的大对象引用。这个领域实际上是什么?什么查询会导致错误? –

+0

也许'lo_manage()'函数不够挑剔? – joop

回答

1

掉落触发:

drop trigger remove_unused_large_objects on photo; 
+0

正如我正确理解,我不需要这个字节字段的触发器,但我需要这样的清理大型对象。我对么? –

+0

是的,有人(也许是你)已经改变了照片存储的方式,现在触发器不相关。 – klin

+0

对,如果你使用的是大对象。但是,你会有一个整数或oid列来引用它们。除非你的代码做了一些可怕的错误,比如把oid干扰到bytea列。 –

0

尝试使用此

从那里的PrimaryKey = '您要删除' 照片删除;

+0

我试过这样的方法,并得到了相同的错误 –