在 postgres 中恢复 sql 文件时退出代码 1

问题描述

我有一个手动生成sql 文件。我使用下面的代码来创建它。

conn = psycopg2.connect(host=t_host,port=t_port,dbname=t_dbname,user=t_name_user,password=t_password)
cursor = conn.cursor()

table_name='product'  
with open("table_dump.sql","w+") as f:
    create_query ="""CREATE TABLE public.decima
                    (
                        product_name character varying(200) COLLATE pg_catalog."default",product_owner character varying(20) COLLATE pg_catalog."default",trigger_operation character varying(4) COLLATE pg_catalog."default",name character varying(250) COLLATE pg_catalog."default" NOT NULL,CONSTRAINT product_pkey PRIMARY KEY (name)
                    )

                    TABLESPACE pg_default;"""
    f.write('%s \n' % (create_query))  
    #select table query
    cursor.execute("SELECT * FROM %s" % (table_name)) 
    column_names = []
    columns_descr = cursor.description
    for c in columns_descr:
        column_names.append(c[0])
    #insert query (insert data)
    insert_prefix = 'INSERT INTO %s (%s) VALUES ' % (table_name,','.join(column_names))
    rows = cursor.fetchall()
    for row in rows:
        row_data = []
        for rd in row:
            if rd is None:
                row_data.append('NULL')
            elif isinstance(rd,datetime.datetime):
                row_data.append("'%s'" % (rd.strftime('%Y-%m-%d %H:%M:%s') ))
            else:
                row_data.append(repr(rd))
        f.write('%s (%s);\n' % (insert_prefix,'.join(row_data)))  

当我使用“table_dump.sql”恢复db时,出现退出码。但是我将这个文件作为查询执行,然后我的数据库仍然被创建并照常工作。 那么如何解决这个问题。谢谢你。 这是我尝试恢复的方式

The way that I restore the file

my table_dump.sql

这是错误的详细信息

The detail of error

解决方法

恢复选项不适用于 sql 格式的文件。 (我不知道为什么 PgAdmin4 在文件选择器中提供 'sql' 作为扩展名,这可能是一个错误)。恢复选项是为 pg_dump 可以生成的非普通文件格式创建的。

您使用的是旧版本的 PgAdmin4,它会丢失来自 pg_restore 的错误消息。如果将其升级到最新版本,则会看到错误消息 pg_restore: error: input file does not appear to be a valid archive

但是有什么问题呢?你说将它作为脚本运行。那就这样做吧。