繁体   English   中英

创建循环以创建PostgreSQL列

[英]Create loop to create PostgreSQL columns

我在csv文件中有一个320列的数据集,其中标题只是行程数。

每列代表一次旅行,即一条街道名称从A到B的路线。(这是一个简单的列表,我在excel中将其转换为以头为单位创建的旅行编号。)

我想将其导入到postgreSQL表中。

我看到了以前的类似问题 ,但是由于只有320个,所以我想知道这是否是最好的结构,如果是的话,如何循环创建列以便通过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$;

非常感谢

创建具有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$$;

合理的关系设计可能是(疯狂的猜测,几乎没有足够的信息):

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)
);

考虑:

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

PostgreSQL选择查询中的最大列数是多少

如果您已经在excel中拥有数据,则可以使用另存为CSV并使用COPY导入数据

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

或使用字符串连接在excel中创建INSERT语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM