首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Postgres包: psycopg2 copy_from vs copy_expert

Postgres包: psycopg2 copy_from vs copy_expert
EN

Stack Overflow用户
提问于 2020-11-12 18:57:17
回答 1查看 1.6K关注 0票数 2

要求:使用S3将数百万行加载到表中,并避免内存问题

我看到有两种方法,分别是copy_from 2和copy_expert。

其中哪一个最有效并避免了内存问题。

另外,我看到Redshift(即Postgres)支持复制命令从S3文件加载数据,但不确定Postgres是否支持这种特性

EN

回答 1

Stack Overflow用户

发布于 2022-05-05 15:32:59

我的实现将copy_from更改为copy_expert。对PostgreSQL负载的广泛分析可以在这里找到:https://hakibenita.com/fast-load-data-python-postgresql

COPY_FROM

代码语言:javascript
运行
复制
def insert_with_string_io(df: pd.DataFrame, table_name: str):
        buffer = io.StringIO()
        df.to_csv(buffer, index=False, header=False)
        buffer.seek(0)
        with conn.cursor() as cursor:
            try:
                cursor.copy_from(file=buffer, table=table_name, sep=",", null="")
            except (Exception, psycopg2.DatabaseError) as error:
                print("Error: %s" % error)

COPY_EXPERT

代码语言:javascript
运行
复制
def insert_with_string_io(df: pd.DataFrame):
        buffer = io.StringIO()
        df.to_csv(buffer, index=False, header=False)
        buffer.seek(0)
        with conn.cursor() as cursor:
            try:
                cursor.copy_expert(f"COPY <database>.<schema>.<table> FROM STDIN (FORMAT 'csv', HEADER false)" , buffer)
            except (Exception, psycopg2.DatabaseError) as error:
                print("Error: %s" % error)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64810090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档