Postgresql 将记录复制到表中并更新父记录id关系

Postgresql 将记录复制到表中并更新父记录id关系,postgresql,Postgresql,我需要在具有父子关系的表中复制记录。由于新记录将有一个新记录id,因此需要保留和更新父/子关系以反映新记录id(主键) 假设我有下表: asset_id parent_asset_id 1 NULL 5 1 23 1 25 23 当我将记录复制到表中时,它们如下所示: asset_id parent_asset_id 42 NULL 43 1 4

我需要在具有父子关系的表中复制记录。由于新记录将有一个新记录id,因此需要保留和更新父/子关系以反映新记录id(主键)

假设我有下表:

asset_id   parent_asset_id
    1        NULL
    5         1
    23        1
    25        23
当我将记录复制到表中时,它们如下所示:

asset_id   parent_asset_id
    42        NULL
    43        1
    44        1
    45        23
我需要新的资产与母公司关系如下:

asset_id   parent_asset_id
    42        NULL
    43        42
    44        42
    45        44
我正在尝试使用CTE(但这可能不是最好的方法)。我用新记录更新当前的
asset.asset
表,然后想更新父子关系,但无法确定如何联接表以获得正确的关系

parent\u asset\u id
是需要具有正确关系的列,所有其他字段保持不变

CREATE FUNCTION asset.copy_asset_store(
    IN _username VARCHAR(100),
    IN _src_asset_store_id VARCHAR,
    IN _dest_asset_store_id VARCHAR
)

DECLARE
    v_user_id INT;

 BEGIN

    WITH copy_into_study AS(
    UPDATE
        asset.asset
    SET
        origin_asset_id = original.origin_asset_id,
        asset_type_id = original.asset_type_id,
        asset_store_id = _dest_asset_store_id,
        parent_asset_id = original.parent_asset_id
        asset_name = original.asset_name,
        asset_desc = original.asset_desc,
        is_signature_required = original.is_signature_required,
        s3_bucket_id = original.s3_bucket_id,
        color_id = original.color_id,
        asset_expiration = original.asset_expiration,
        is_deleted = original.is_deleted,
        rec_created_by_user_id = v_user_id,
        rec_updated_by_user_id = v_user_id
    FROM
        asset.asset AS original
    WHERE
        original.asset_store_id = _src_asset_store_id::INT
    RETURNING *
    ),update_parent AS (
        UPDATE
            asset.asset
        SET
            parent_asset_id = copy_into_study.parent_asset_id
        FROM 
            copy_into_study
        WHERE 

    )

资产id来自哪里?你如何知道孩子/父母的关系?到旧表的连接在哪里。。。请详细解释一下你想做什么。可能会添加一些数据
资产\u id
是主键。当有人更新或创建新记录时,前端将向我提供父资产id。它基于他们存储资产(文件)的位置。根目录或根目录的子文件夹。您是说它是在插入后提供给您的自动增量值?这听起来是一个非常糟糕的主意:你想复制记录,但不知道它们得到了什么值,而不与旧值建立任何连接,然后尝试在这些值上重建父关系?最简单的方法是:复制原始值,添加+1000或其他值,然后手动将自动递增计数器重置为下一个最高值。@S-Man您是正确的,这是一个自动递增值,直到插入之后我才知道它是什么。数据库对我来说都是非常新的,我正试图找出如何解决这个问题。