Why DuckDB tells me there is no column named that way when I try to drop a column?
D DESCRIBE oa_pub;
┌──────────────┬─────────────┬─────────┬─────────┬──────────────────────────┬─────────┐
│ column_name │ column_type │ null │ key │ default │ extra │
│ varchar │ varchar │ varchar │ varchar │ varchar │ varchar │
├──────────────┼─────────────┼─────────┼─────────┼──────────────────────────┼─────────┤
│ id │ INTEGER │ NO │ PRI │ nextval('oa_pub_id_seq') │ NULL │
│ project_id │ INTEGER │ NO │ UNI │ NULL │ NULL │
│ oa_author_id │ VARCHAR │ NO │ UNI │ NULL │ NULL │
│ oa_pub_id │ VARCHAR │ NO │ UNI │ NULL │ NULL │
│ oa_pub_json │ JSON │ YES │ NULL │ NULL │ NULL │
│ oa_pub_id_2 │ VARCHAR │ YES │ NULL │ NULL │ NULL │
└──────────────┴─────────────┴─────────┴─────────┴──────────────────────────┴─────────┘
D ALTER TABLE oa_pub DROP COLUMN oa_pub_id;
Catalog Error:
table "oa_pub" does not have a column named oa_pub_id
Although the error message is cryptic, the problem was that oa_pub_id
is part of a unique constraint. See the key
column of the table returned by DESCRIBE
.
To reproduce:
D CREATE TABLE test2 (id INT PRIMARY KEY, name TEXT, surname TEXT, age INT, UNIQUE(surname, age));
D DESCRIBE test2;
┌─────────────┬─────────────┬─────────┬─────────┬─────────┬─────────┐
│ column_name │ column_type │ null │ key │ default │ extra │
│ varchar │ varchar │ varchar │ varchar │ varchar │ varchar │
├─────────────┼─────────────┼─────────┼─────────┼─────────┼─────────┤
│ id │ INTEGER │ NO │ PRI │ NULL │ NULL │
│ name │ VARCHAR │ YES │ NULL │ NULL │ NULL │
│ surname │ VARCHAR │ YES │ UNI │ NULL │ NULL │
│ age │ INTEGER │ YES │ UNI │ NULL │ NULL │
└─────────────┴─────────────┴─────────┴─────────┴─────────┴─────────┘
D ALTER TABLE test2 DROP COLUMN surname;
Catalog Error:
table "test2" does not have a column named "surname"