Skip to content

Commit a615402

Browse files
author
Anton Mantulo
committed
fix: add primary keys when upserting in Postgres
1 parent 1686539 commit a615402

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

awswrangler/postgresql.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def _create_table(
6969
index: bool,
7070
dtype: dict[str, str] | None,
7171
varchar_lengths: dict[str, int] | None,
72+
primary_keys: list[str] | None = None,
7273
) -> None:
7374
if mode == "overwrite":
7475
_drop_table(cursor=cursor, schema=schema, table=table)
@@ -83,6 +84,8 @@ def _create_table(
8384
converter_func=_data_types.pyarrow2postgresql,
8485
)
8586
cols_str: str = "".join([f"{_identifier(k)} {v},\n" for k, v in postgresql_types.items()])[:-2]
87+
if primary_keys:
88+
cols_str += f",\nprimary key ({', '.join([_identifier(k) for k in primary_keys])})"
8689
sql = f"CREATE TABLE IF NOT EXISTS {_identifier(schema)}.{_identifier(table)} (\n{cols_str})"
8790
_logger.debug("Create table query:\n%s", sql)
8891
cursor.execute(sql)
@@ -586,6 +589,7 @@ def to_sql(
586589
index=index,
587590
dtype=dtype,
588591
varchar_lengths=varchar_lengths,
592+
primary_keys=upsert_conflict_columns,
589593
)
590594
if index:
591595
df.reset_index(level=df.index.names, inplace=True)

0 commit comments

Comments
 (0)