lo_create(0) 如何与插入查询一起使用
lo_create(0) how to use with insert query
insert into hospital_image
select 'HospitalImage',
lo_from_bytea(1,decode('/9j/4AAQSkZJRgABAQEA3ADcAAD','base64')),
'jpg',
'123'
where not exists (select null from pg_largeObject where loid=1);
CREATE TABLE hospital_image (
key character varying(30) NOT NULL,
image oid NOT NULL,
mime_type character varying(30) NOT NULL,
version numeric(8,0) NOT NULL,
CONSTRAINT
pk_hospital_image PRIMARY KEY (key)
) WITH ( OIDS=FALSE );
ALTER TABLE
hospital_image OWNER TO postgres;
在上面的语句中,我们手动提供 loid
作为 1。相反,我们希望使用 lo_create(0)
动态获取 loid
。当我按照 the Postgres docs 使用 lo_create(0)
时,出现异常。
我同时使用了 lo_creat(-1)
和 lo_create(0)
。两者都不起作用。它说 loid
已经存在。如何在我的查询中使用上述功能。
我的 SQL 包含变量 OID 的语句是:
INSERT INTO hospital_image (key, image, mime_type, version)
VALUES ('MainLogoImage99999',
lo_from_bytea(lo_create(0),
decode('/9j4AAQSkZJRgABAQEA3ADcAAD',
'base64')),
'jpg',
123);
错误信息是:
ERROR: duplicate key value violates unique constraint "pg_largeobject_metadata_oid_index"
SQL state: 23505
Detail: Key (oid)=(34773) already exists.
lo_creat(-1)
(参数无关紧要)和 lo_create(0)
都将创建一个新的大对象和 return 它的 OID。
lo_create(-1)
与 lo_create(4294967295)
相同 – OID 是无符号的 4 字节整数。
lo_from_bytea
also 创建一个新的大对象,所以如果你将 lo_create
的结果传递给它,它会抱怨它不能创建一个大对象再次使用相同的号码。
只需将 0
而不是 lo_create(0)
作为第一个参数传递给 lo_from_bytea
。
insert into hospital_image
select 'HospitalImage',
lo_from_bytea(1,decode('/9j/4AAQSkZJRgABAQEA3ADcAAD','base64')),
'jpg',
'123'
where not exists (select null from pg_largeObject where loid=1);
CREATE TABLE hospital_image (
key character varying(30) NOT NULL,
image oid NOT NULL,
mime_type character varying(30) NOT NULL,
version numeric(8,0) NOT NULL,
CONSTRAINT
pk_hospital_image PRIMARY KEY (key)
) WITH ( OIDS=FALSE );
ALTER TABLE
hospital_image OWNER TO postgres;
在上面的语句中,我们手动提供 loid
作为 1。相反,我们希望使用 lo_create(0)
动态获取 loid
。当我按照 the Postgres docs 使用 lo_create(0)
时,出现异常。
我同时使用了 lo_creat(-1)
和 lo_create(0)
。两者都不起作用。它说 loid
已经存在。如何在我的查询中使用上述功能。
我的 SQL 包含变量 OID 的语句是:
INSERT INTO hospital_image (key, image, mime_type, version)
VALUES ('MainLogoImage99999',
lo_from_bytea(lo_create(0),
decode('/9j4AAQSkZJRgABAQEA3ADcAAD',
'base64')),
'jpg',
123);
错误信息是:
ERROR: duplicate key value violates unique constraint "pg_largeobject_metadata_oid_index"
SQL state: 23505
Detail: Key (oid)=(34773) already exists.
lo_creat(-1)
(参数无关紧要)和 lo_create(0)
都将创建一个新的大对象和 return 它的 OID。
lo_create(-1)
与 lo_create(4294967295)
相同 – OID 是无符号的 4 字节整数。
lo_from_bytea
also 创建一个新的大对象,所以如果你将 lo_create
的结果传递给它,它会抱怨它不能创建一个大对象再次使用相同的号码。
只需将 0
而不是 lo_create(0)
作为第一个参数传递给 lo_from_bytea
。