Postgresql 将记录复制到表中并更新父记录id关系
我需要在具有父子关系的表中复制记录。由于新记录将有一个新记录id,因此需要保留和更新父/子关系以反映新记录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
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您是正确的,这是一个自动递增值,直到插入之后我才知道它是什么。数据库对我来说都是非常新的,我正试图找出如何解决这个问题。