问题描述
我有一个手动生成的 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时,出现退出码。但是我将这个文件作为查询执行,然后我的数据库仍然被创建并照常工作。 那么如何解决这个问题。谢谢你。 这是我尝试恢复的方式 这是错误的详细信息
解决方法
恢复选项不适用于 sql 格式的文件。 (我不知道为什么 PgAdmin4 在文件选择器中提供 'sql' 作为扩展名,这可能是一个错误)。恢复选项是为 pg_dump 可以生成的非普通文件格式创建的。
您使用的是旧版本的 PgAdmin4,它会丢失来自 pg_restore 的错误消息。如果将其升级到最新版本,则会看到错误消息 pg_restore: error: input file does not appear to be a valid archive
但是有什么问题呢?你说将它作为脚本运行。那就这样做吧。