看到stackoverflow有人问,如何给任意一个表生成insert语句,为了方便把数据从一个测试库转到另一个测试库上,为此,我写了一个小函数,没有做严格的测试,有兴趣的可以拿来试试。
create language plpythonu;
create or replace function geninsert1(_table text)
returns setof text
as
$$
def isstr(v):
if v == None:
return 'NULL'
elif isinstance(v,str):
return "'%s'" % v
else:
return str(v)
alist=[]
result = plpy.execute("select * from "+_table)
for x in result:
fieldlist=x.keys()
fields=','.join(fieldlist)
fvalues=','.join([isstr(x[y]) or 'NULL' for y in fieldlist])
sql="insert into %s (%s) VALUES(%s)" % (_table,fields,fvalues)
alist.append(sql)
return alist
return ''
$$
language plpythonu;
select * from geninsert1('mytable')