在postgresql中生成create table语句

ttp71kqs  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(478)

我正在尝试将数据从postgres移动到sqlserver。我想使用元数据从sqlserver中的postgres重新创建表。
information\u schema具有列数据类型,但我需要解析该信息以生成可用的create table语句。
有没有什么模块可以帮我做这个?
我对Python的场景还不熟悉。谢谢
jlj公司

mccptt67

mccptt671#

请使用下面的查询获取 create statement ,请将表名传入 where 条款

select 'CREATE TABLE ' || a.attrelid::regclass::text || '(' ||
string_agg(a.attname || ' ' || pg_catalog.format_type(a.atttypid,
a.atttypmod)||
    CASE WHEN
        (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128)
         FROM pg_catalog.pg_attrdef d
         WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef) IS NOT 
NULL THEN
        ' DEFAULT '|| (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128)
                      FROM pg_catalog.pg_attrdef d
                      WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef)
    ELSE
        '' END
||
    CASE WHEN a.attnotnull = true THEN
        ' NOT NULL'
    ELSE
        '' END,E'\n,') || ');'
FROM pg_catalog.pg_attribute a join pg_class on a.attrelid=pg_class.oid
WHERE a.attrelid::regclass::varchar =
'table_name'
AND a.attnum > 0 AND NOT a.attisdropped  and pg_class.relkind='r'
group by a.attrelid;

相关问题