【问题标题】:psycopg2.errors.DuplicateTable: Relation "uac_c2_py" already existspsycopg2.errors.DuplicateTable:关系“uac_c2_py”已经存在
【发布时间】:2021-05-12 07:16:09
【问题描述】:

这是我第一次在这里发帖,如果我还没有遵循最佳做法,我很抱歉。

我已经开发了一个代码(比如说“cod1”)来基本上执行以下操作:

  • 使用 pandas 从数据库(红移)写入数据
  • 使用 DataFrame 进行一些转换
  • 将数据附加到数据库中的现有表(红移)

cod1的片段:

    engine = create_engine(
        'redshift+psycopg2://{0}:{1}@{2}:{3}/{4}'.format(  
            pg_param['user'], pg_param['password'], pg_param['host'], pg_param['port'], pg_param['database'])
    )

    df_2[col_list].to_sql(_pg_table_name, con=engine,
                      if_exists='append',  method='multi', schema=_pg_table_schema)

cod1 中运行脚本之前,我已经在另一个 python 脚本中创建了 db 表。

当我在开发环境 (postgres) 中运行 code1 时,它工作正常。但是,当我在专业环境(红移)中运行它时,它会抛出以下错误:

psycopg2.errors.DuplicateTable: Relation "uac_c2_py" already exists

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DuplicateTable) Relation "uac_c2_py" already exists

'''
[SQL:
CREATE TABLE eu_fleet_analytics."UAC_C2_py" (
        index BIGINT,
        lat TEXT,
        long TEXT,
        "PROD" FLOAT(53),
        "CON" FLOAT(53),
        "DTT" FLOAT(53),
        "RTT" FLOAT(53),
        "MTT" FLOAT(53),
        "LOTT" FLOAT(53),
        "WOTT" FLOAT(53),
        "ESTT" FLOAT(53),
        "SOTT" FLOAT(53),
        "EECTT" FLOAT(53),
        "CSTT" FLOAT(53),
        "WDCT" FLOAT(53),
        "OTT" FLOAT(53),
)
]'''

并显示它正在尝试执行 CREATE TABLE sql 语句,即使它不在我的代码中。

有谁知道我该如何解决它或任何解决方法?

提前谢谢你。

【问题讨论】:

  • 在我看来,其他脚本正在运行并尝试CREATE 表,因为if_exists='append' 不会对现有表有问题。它也不会尝试CREATE 一个新的。
  • @AdrianKlaver,我在前一天运行之前的 python 脚本来创建表。在 pro env 中,我试图在表中追加比在 dev env 中更多的行。会不会是个问题?
  • 错误消息告诉你问题,当它已经存在时,正在尝试执行CREATE TABLE eu_fleet_analytics."UAC_C2_py"。附加行与此无关。您的进程的某些部分在不应该运行CREATE TABLE 时运行。你需要找到那是什么。我将从查看 Postgres 日志开始。

标签: python sqlalchemy amazon-redshift psycopg2


【解决方案1】:

我有同样的问题。 最终我发现表名是区分大小写的(在你的情况下是_pg_table_name)。

会发生什么?当您在小写样式中转换选项卡名称中创建表时。但是当您至少有一个大写字母并且它检查选项卡是否存在时,它不匹配并尝试创建它,然后它发现它已经存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2021-11-04
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    相关资源
    最近更新 更多