创建循环以创建PostgreSQL列

时间:2015-12-05 12:09:19

标签: sql excel postgresql loops csv

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

每列代表一次旅行,街道名称从A到B的路线。 (这是一个简单的列表,我在excel中转​​换以创建行程数作为头。)

我想将它导入postgreSQL表。

我之前看过类似的question,但因为它只有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$;

非常感谢

2 个答案:

答案 0 :(得分:3)

创建包含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)
);

考虑:

答案 1 :(得分:0)

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

What is the maximum number of columns in a PostgreSQL select query

如果您已将数据保存在Excel中,则可以使用另存为CSV并使用func getPosts(getposts : String) { Alamofire.request(.GET, getposts, parameters:parameters) .responseJSON { response in guard let data = response.result.value else{ print("Request failed with error") return } self.json = JSON(data) self.tableView.reloadData() } } 导入数据

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

或者使用字符串连接在excel中创建INSERT statmente。