簡體   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