当要更新的每一行都是不同的值时,如何更新现有表

时间:2018-06-22 09:32:27

标签: sql postgresql

我有一个file表,其中有data列,其中文件数据以字节为单位存储。出于性能原因,我必须取出数据列并将其放在名为fileData的新表中。 filefileData表具有@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;

谢谢。

0 个答案:

没有答案