我有一个表定义文件,格式如下
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 :(得分:0)
SQL是你的朋友,它非常富有表现力,你可以使用string_agg函数构建你的表def。看看这里的例子。
答案 1 :(得分:0)
介意我将varchar2更改为varchar,将number更改为integer.also你有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