创build循环来创buildPostgreSQL列

我有一个csv文件中的320列的数据集,其中头是简单的旅行的数量。

每一列代表一次旅行,一条从A到B的街道名称路线(这是一个简单的列表,我用excel转换来创build行程号码)。

我想将其导入到PostgreSQL表中。

我看到以前的类似问题 ,但因为它只有320,我不知道这是否是最好的结构,如果是的话,如何循环创build列以便通过pgAdmin插入数据。

我想到目前为止,这返回错误信息:

DO $do$ BEGIN FOR i IN 1..320 LOOP INSERT INTO runs (col_i, col_id) -- use col names SELECT i, id FROM tbl; END LOOP; END $do$; 

非常感谢

创build一个包含320个text列的表格:

 DO $$BEGIN EXECUTE ( SELECT 'CREATE TABLE my_tbl (c' || string_agg(g::text, ' text, c') || ' text)' FROM generate_series(1,320) g); END$$; 

一个理智的关系devise可能是(疯狂的猜测,还没有足够的信息):

 CREATE TABLE street ( street_id serial PRIMARY KEY , street text NOT NULL ); CREATE TABLE trip ( trip_id serial PRIMARY KEY , whatever text ); CREATE TABLE trip_step ( trip_id int REFERENCES trip , step int , street_id int NOT NULL REFERENCES street , PRIMARY KEY (trip_id, step) ); 

考虑:

  • 如何在PostgreSQL中实现多对多的关系?

根据您的数据types,最大列数从250到1600,这可能是一个问题

PostgreSQLselect查询中的最大列数是多less?

如果你已经有了你的数据在Excel中,你可以使用保存为CSV和使用COPY导入数据

https://stackoverflow.com/a/2987451/3470178

或者使用string连接在Excel中创buildINSERT statmente。