gpt4 book ai didi

具有模式支持的 postgresql 副本

转载 作者:行者123 更新时间:2023-11-29 13:05:33 26 4
gpt4 key购买 nike

我正在尝试使用 postgresql COPY 命令从 CSV 加载一些数据。诀窍是我想在用户标识(包含在 CSV 中)上实现 Multi-Tenancy 。加载 csv 时,是否有一种简单的方法告诉 postgres 复制命令根据此用户 ID 进行过滤?

即userid=x 的所有行转到 schema=x,userid=y 的行转到 schema=y。

最佳答案

仅使用 COPY 命令无法完成此操作,但您可以将所有数据复制到主表中,然后组合一个简单的 PL/PGSQL 函数来为您执行此操作。像这样的 -

CREATE OR REPLACE FUNCTION public.spike()
RETURNS void AS
$BODY$
DECLARE
user_id integer;
destination_schema text;
BEGIN
FOR user_id IN SELECT userid FROM master_table GROUP BY userid LOOP
CASE user_id
WHEN 1 THEN
destination_schema := 'foo';
WHEN 2 THEN
destination_schema := 'bar';
ELSE
destination_schema := 'baz';
END CASE;


EXECUTE 'INSERT INTO '|| destination_schema ||'.my_table SELECT * FROM master_table WHERE userid=$1' USING user_id;
-- EXECUTE 'DELETE FROM master_table WHERE userid=$1' USING user_id;

END LOOP;

TRUNCATE TABLE master_table;

RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;

这从 master_table 中获取所有唯一的 user_id,使用 CASE 语句确定目标架构,然后执行 INSERT SELECT 移动行,最后删除移动的行。

关于具有模式支持的 postgresql 副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13767464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com