2017-09-26 69 views
0

我有表定義文件,按以下格式導入CSV表定義爲PostgreSQL的

Table Name Field Name Field Data Type 
ATableName1 AFieldName1 VARCHAR2 
ATableName1 AFieldName2 NUMBER 
... 
ATableNameX AFieldNameX1 TIMESTAMP(6) 

有沒有簡單的方法導入到Postgres的這種自動創建表?

如果我將文件拆分成單獨的表格,並且每個表格只有一個csv的字段名稱/數據類型,該怎麼辦?

Field Name Field Data Type 
AFieldName1 VARCHAR2 
AFieldName2 NUMBER 

我的搜索只使用pgfutter通過複製和表創建(基於數據)生成數據導入。

+0

我試圖避免「創建一個與你有的結構表」的一部分。我有500個表格來創建,尋找更好的方法來導入它們。至此,看起來我將不得不在我的csv上使用查找/替換,並將其變爲創建/修改。 – Jamie

回答

0

我心中VARCHAR2更改爲varchar和數量integer.alsoyou有TSV - 爲了使用它,在我的代碼更改chr(44)chr(9)。介意我不檢查注射,否則這裏的工作示例:

t=# do 
$$ 
declare 
    _r record; 
begin 
    for _r in (
with t(l) as (values('ATableName1,AFieldName1i, VARCHAR 
ATableName1,AFieldName2,INTEGER 
ATableNameX,AFieldNameX1,TIMESTAMP(6)'::text) 
) 
, r as (select unnest(string_to_array(l,chr(10))) rw from t) 
, p as (select split_part(rw,chr(44),1) tn, split_part(rw,chr(44),2) cn,split_part(rw,chr(44),3) tp from r) 
select tn||' ('||string_agg(cn||' '||tp, ', ')||')' s from p 
group by tn 
) loop 
    raise info '%','create table '||_r.s; 
    execute 'create table '||_r.s; 
    end loop; 
end; 
$$ 
; 
INFO: create table ATableNameX (AFieldNameX1 TIMESTAMP(6)) 
INFO: create table ATableName1 (AFieldName1i VARCHAR, AFieldName2 INTEGER) 
DO 
Time: 16.743 ms 
t=# \dt AF 

t=# \dt atablename* 
      List of relations 
Schema | Name  | Type | Owner 
--------+-------------+-------+------- 
public | atablename1 | table | vao 
public | atablenamex | table | vao 
+0

所以我只是將我的整個.csv文本複製並粘貼到'with t(l)as(values(''section?(with data type mods)。是否有簡單的方法來注入文件? – Jamie

+0

如果您的選項卡沒有 - 以上是「最簡單的」 –

+0

我實際上並沒有使用標籤,它是一個.csv文件,我只是將它表示爲表格(因爲我正在用電子表格查看它們)。 – Jamie