Skip to content

Inconsistent Column Name Quoting in DuckDB with PostgreSQL Integration #329

Open
@camargocr

Description

@camargocr

What happens?

When using the DuckDB package in Python to import a CSV file into PostgreSQL, I've observed inconsistent behavior regarding column names:

  • Lower Case Column Titles: if the CSV file's header (column titles) is in lower case, the corresponding column names in the created PostgreSQL table appear without quotes.

  • Upper Case Column Titles: if the CSV file's header is in upper case, the corresponding column names in the PostgreSQL table are enclosed in quotes, even when the preserve_identifier_case setting is set to False.

This behavior appears inconsistent and may indicate a bug. Below is the Python script used for testing this issue.

To Reproduce

#!/usr/bin/env python
# coding: utf-8

import duckdb as db

con = db.connect()
con.install_extension("postgres")
con.load_extension("postgres")
con.execute("set preserve_identifier_case = false;")


sql_cmd = """
attach 'host=localhost 
        port=5432 
        dbname=db
        user=jonhdoe 
        password=marydoe' as pg (type postgres);
"""
con.sql(sql_cmd)

sql_cmd = """
drop table if exists pg.list;
create table pg.list_lower as 
select * from 'test_lower.csv';
"""
con.sql(sql_cmd)

sql_cmd = """
drop table if exists pg.list;
create table pg.list_upper as 
select * from 'test_upper.csv';
"""
con.sql(sql_cmd)

con.close()
CUST_ID,START_DATE,END_DATE,TRANS_ID,DATE,YEAR,MONTH,DAY,EXP_TYPE,AMOUNT
CI6XLYUMQK,2015-05-01,,T8I9ZB5A6X90UG8,2015-09-11,2015,9,11,Motor/Travel,20.27
CI6XLYUMQK,2015-05-01,,TZ4JSLS7SC7FO9H,2017-02-08,2017,2,8,Motor/Travel,12.85
CI6XLYUMQK,2015-05-01,,TTUKRDDJ6B6F42H,2015-08-01,2015,8,1,Housing,383.8
CI6XLYUMQK,2015-05-01,,TDUHFRUKGPPI6HD,2019-03-16,2019,3,16,Entertainment,5.72
CI6XLYUMQK,2015-05-01,,T0JBZHBMSVRFMMD,2015-05-15,2015,5,15,Entertainment,11.06
CI6XLYUMQK,2015-05-01,,TZBO76X87ZUWBJ0,2016-02-22,2016,2,22,Motor/Travel,20.37
CI6XLYUMQK,2015-05-01,,T8YEYMHF208963N,2015-08-20,2015,8,20,Entertainment,15.97
CI6XLYUMQK,2015-05-01,,TQNUZKC8K4W0S9H,2016-07-16,2016,7,16,Entertainment,17.46
CI6XLYUMQK,2015-05-01,,TQJ3BTAB7E449ZN,2018-12-23,2018,12,23,Groceries,26.77
CI6XLYUMQK,2015-05-01,,TMFITCZBN0YK9FM,2020-12-02,2020,12,2,Entertainment,8.24
CI6XLYUMQK,2015-05-01,,TEDY6MR01ELTHWY,2018-02-25,2018,2,25,Groceries,9.27
CI6XLYUMQK,2015-05-01,,TRUQRD6ME4A13I0,2019-04-15,2019,4,15,Groceries,8.97
CI6XLYUMQK,2015-05-01,,T13LUKGW0O8SAIQ,2017-01-20,2017,1,20,Motor/Travel,23.95
CI6XLYUMQK,2015-05-01,,T8DBBZQXIR0X93O,2015-06-14,2015,6,14,Groceries,8.24
CI6XLYUMQK,2015-05-01,,T4H2B228GNWC4ES,2018-03-27,2018,3,27,Entertainment,9.58
CI6XLYUMQK,2015-05-01,,T0TGOW0T3504WJ3,2020-05-06,2020,5,6,Groceries,17.44
cust_id,start_date,end_date,trans_id,date,year,month,day,exp_type,amount
CI6XLYUMQK,2015-05-01,,T8I9ZB5A6X90UG8,2015-09-11,2015,9,11,Motor/Travel,20.27
CI6XLYUMQK,2015-05-01,,TZ4JSLS7SC7FO9H,2017-02-08,2017,2,8,Motor/Travel,12.85
CI6XLYUMQK,2015-05-01,,TTUKRDDJ6B6F42H,2015-08-01,2015,8,1,Housing,383.8
CI6XLYUMQK,2015-05-01,,TDUHFRUKGPPI6HD,2019-03-16,2019,3,16,Entertainment,5.72
CI6XLYUMQK,2015-05-01,,T0JBZHBMSVRFMMD,2015-05-15,2015,5,15,Entertainment,11.06
CI6XLYUMQK,2015-05-01,,TZBO76X87ZUWBJ0,2016-02-22,2016,2,22,Motor/Travel,20.37
CI6XLYUMQK,2015-05-01,,T8YEYMHF208963N,2015-08-20,2015,8,20,Entertainment,15.97
CI6XLYUMQK,2015-05-01,,TQNUZKC8K4W0S9H,2016-07-16,2016,7,16,Entertainment,17.46
CI6XLYUMQK,2015-05-01,,TQJ3BTAB7E449ZN,2018-12-23,2018,12,23,Groceries,26.77
CI6XLYUMQK,2015-05-01,,TMFITCZBN0YK9FM,2020-12-02,2020,12,2,Entertainment,8.24
CI6XLYUMQK,2015-05-01,,TEDY6MR01ELTHWY,2018-02-25,2018,2,25,Groceries,9.27
CI6XLYUMQK,2015-05-01,,TRUQRD6ME4A13I0,2019-04-15,2019,4,15,Groceries,8.97
CI6XLYUMQK,2015-05-01,,T13LUKGW0O8SAIQ,2017-01-20,2017,1,20,Motor/Travel,23.95
CI6XLYUMQK,2015-05-01,,T8DBBZQXIR0X93O,2015-06-14,2015,6,14,Groceries,8.24
CI6XLYUMQK,2015-05-01,,T4H2B228GNWC4ES,2018-03-27,2018,3,27,Entertainment,9.58
CI6XLYUMQK,2015-05-01,,T0TGOW0T3504WJ3,2020-05-06,2020,5,6,Groceries,17.44

OS:

MacOS X sequoia 15.5 M2 aarch64

DuckDB Version:

v1.2.2 7c039464e4

DuckDB Client:

1.3.0

Hardware:

M2

Full Name:

Carlos Rogerio Camargo

Affiliation:

Universidade Federal de Santa Catarina

What is the latest build you tested with? If possible, we recommend testing with the latest nightly build.

I have tested with a stable release

Did you include all relevant data sets for reproducing the issue?

Yes

Did you include all code required to reproduce the issue?

  • Yes, I have

Did you include all relevant configuration (e.g., CPU architecture, Python version, Linux distribution) to reproduce the issue?

  • Yes, I have

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions