我有一个file
表,其中有data
列,其中文件数据以字节为单位存储。出于性能原因,我必须取出数据列并将其放在名为fileData
的新表中。 file
和fileData
表具有@OnetoOne
映射。
CREATE TABLE public.file
(
id character varying(255) NOT NULL,
contenttype character varying(255),
name character varying(255),
size character varying(255),
dataId character varying(255),
CONSTRAINT file_pkey PRIMARY KEY (id),
CONSTRAINT fk8af75923ef78c73c FOREIGN KEY (dataId)
REFERENCES public.filedata (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
CREATE TABLE filedata
(
id character varying(255) NOT NULL,
filedata bytea,
CONSTRAINT filedata_pkey PRIMARY KEY (id)
)
现在,我需要将文件表中数据列的所有值移植到fileData表中。我怎样才能做到这一点?我正在使用如下存储过程。但是我不确定如何为文件表的所有行更新dataId
CREATE OR REPLACE FUNCTION moveDataToNewTable() RETURNS void AS
$BODY$
DECLARE
dataId integer;
_r record;
BEGIN
dataId = 0;
for _r in (select * from file) loop
dataId= dataId+1;
INSERT INTO filedata (id, data) VALUES (dataId, _r.data);
--update file table set dataId to current value of dataId
end loop;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
谢谢。