将行从一个 table 复制到另一个?

Copying row from one table to another?

我有这三个 table 服务,executed_services 和评级 table,它对服务进行评级。我的评级 table 有一个指向 executed_services 的外键,因此,我想 "copy" 将服务评级为 executed_services 关系。我尝试使用以下过程,但是这个 select 不起作用,因为它必须 return 只有一个结果。

    BEGIN
        INSERT INTO servico_executado (id, data_abertura, id_solicitacao, id_profissional) 
            VALUES (SELECT id, data_abertura, id_solicitacao, id_profissional FROM servico WHERE id = NEW.id_servico);
        DELETE FROM servico WHERE id = NEW.id_servico;
        RETURN NEW;
    END;

那么,我应该怎么做才能从一个 table 中获取所有值并插入另一个?或者还有其他方法吗?

 INSERT INTO servico_executado 
       SELECT id, data_abertura, id_solicitacao, id_profissional 
       FROM servico WHERE id = NEW.id_servico;

不要使用'VALUES'。如果 table 中有更多列,则可以在 select 语句中为那些缺失的列使用 null。

您可以通过以下简单查询 CTE 一步轻松完成:

WITH deleted AS (DELETE FROM servico WHERE id =  RETURNING *)
INSERT INTO servico_executado (id, data_abertura, id_solicitacao, id_profissional) 
SELECT id, data_abertura, id_solicitacao, id_profissional FROM deleted
RETURNING *;

不需要使用PL/pgSQL。移动的服务的 id 在上述查询中由占位符 表示。