While a Cursor attribute providing SQL State Code is not officially a part of PEP 249: Python DB API 2.0 spec, there is an ANSI-standardized "SQL state code".
Many database drivers provide this as a Cursor attribute, dbt was able to depend on these drivers to provide it for ConnectionManager.get_response() method, which will report to users after successful queries the kind of operation performed (SELECT, INSERT, CREATE) and the numbers of rows affected. Originally the Redshift adapter for dbt, was supported by the psycopg2 driver, which provides this information in statusmessage.
As reported in dbt-labs/dbt-redshift#785, after migrating the driver dependency to redshift-connector, users are in a degraded state and receive less information than previously due to the SQL state not being available.
Support for SQL state amongst popular analytics database drivers
Ideal implementation
Postgres's CommandComplete message
| Command |
Tag |
rows indicates the number of rows |
INSERT |
INSERT 0 rows |
inserted |
DELETE |
DELETE rows |
deleted |
UPDATE |
UPDATE rows |
updated |
MERGE |
MERGE rows |
inserted, updated, or deleted |
SELECT / CREATE TABLE AS |
SELECT rows |
retrieved |
MOVE |
MOVE rows |
ursor's position has been changed by |
FETCH |
FETCH rows |
that have been retrieved from the cursor |
COPY |
COPY rows |
copied, only in PostgreSQL 8.2 and later |
While a
Cursorattribute providing SQL State Code is not officially a part of PEP 249: Python DB API 2.0 spec, there is an ANSI-standardized "SQL state code".Many database drivers provide this as a
Cursorattribute, dbt was able to depend on these drivers to provide it forConnectionManager.get_response()method, which will report to users after successful queries the kind of operation performed (SELECT,INSERT,CREATE) and the numbers of rows affected. Originally the Redshift adapter for dbt, was supported by thepsycopg2driver, which provides this information instatusmessage.As reported in dbt-labs/dbt-redshift#785, after migrating the driver dependency to
redshift-connector, users are in a degraded state and receive less information than previously due to the SQL state not being available.Support for SQL state amongst popular analytics database drivers
Cursorattribute (docs)statusmessagesnowflake-connector-pythonsqlstateIdeal implementation
Postgres's
CommandCompletemessagerowsindicates the number of rowsINSERTINSERT 0 rowsDELETEDELETE rowsUPDATEUPDATE rowsMERGEMERGE rowsSELECT/CREATE TABLE ASSELECT rowsMOVEMOVE rowsFETCHFETCH rowsCOPYCOPY rowsPostgreSQL8.2 and later