[英]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,所以这可能是一个问题
如果您已经在excel中拥有数据,则可以使用另存为CSV并使用COPY
导入数据
https://stackoverflow.com/a/2987451/3470178
或使用字符串连接在excel中创建INSERT语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.