Postgres - 希望为现有表中的每个项目创建一个新表/行(jsonb)

问题描述 投票:0回答:0

我在 Postgresql(安装了 v13、15)中有一个 308 表数据库,每个表都包含一个 id、meta 和数据列。我主要使用 pgadmin 4 v6.19。每个数据列都是具有不同长度的黑白表的 jsonb。我正在尝试获取数据列并在单独的数据库中构建一个新表,使用相同的表名命名表,并使数据列中的 json 键成为新表中的新列。本质上是一个更易于阅读的设置。

我发现很难循环遍历所有表并且实际上能够使用任何给定行上的数据。我使用了 information_schema.columns 和 information_schema.tables 并获得了更多的概述。我遇到的大问题是无法在 SELECT 语句中使用变量。

我正在尝试双循环,因为我似乎无法使用所有表搜索来获取数据,而且如果没有该搜索,我也无法获取表的名称。记录的 table_rec.table_name,name 变量都解析为 test_table 的名称,但是当放入上面的 select 语句时......我得到了“关系不存在”的错误提示。即使我可以创建一个表,我仍然在为如何让各个列和类型在“创建表”中使用而苦苦挣扎。我主要从 node.js 做这类事情,主要是前端人员。任何建议都有帮助。提前致谢!

DECLARE
rec record;
name varchar;
table_rec record;

BEGIN



FOR table_rec IN 
        SELECT table_schema, table_name, column_name,column_default,data_type
        FROM information_schema.columns
        WHERE column_name='data'
        ORDER BY table_name ASC
    LOOP
    
    SELECT table_name
         INTO name
         FROM information_schema.columns
         WHERE table_name=table_rec.table_name;
    
            RAISE NOTICE '%: %: %: %: %', table_rec.table_schema, table_rec.table_name, table_rec.column_name,table_rec.column_default,table_rec.data_type;
        
            FOR rec IN SELECT * FROM "1cw9vxxv"
                LOOP
                RAISE NOTICE 'data %, %, %, %, %', rec.id,rec.meta,rec.data, table_rec.table_name,name;
                END LOOP;
    
--EXECUTE format('CREATE TABLE refined.%I (id SERIAL NOT NULL, data CHAR(MAX))',rec.data);
        
END LOOP;
END$$;```
sql postgresql jsonb pgadmin
© www.soinside.com 2019 - 2024. All rights reserved.