to_sql method turns datetime64 index to time zone aware in postgres · Issue #23510 · pandas-dev/pandas (original) (raw)

I have a pandas Dataframe with an index which is of type datetime64[ns].
when I use the to_sql method i expect the index to be created as a timestamp postgres column, however it is creates a timestamptz column.

Note that when the datetime64[ns] column is not an index but rather a normal column, this doesn't happen.

pandas 0.23.4, psycopg2 2.7.4, sqlalchemy 1.2.7, PostgreSQL 9.6.6


example

dates = pd.date_range('2018-01-01', periods=5, freq='6h') df_test = pd.DataFrame({'nums': range(5)}, index=dates)

nums
2018-01-01 00:00:00 0
2018-01-01 06:00:00 1
2018-01-01 12:00:00 2

inserting to postgres

df_test.to_sql('foo_table',postgres_uri,schema='data_test',index_label='info_date')

when reading from the database I get the index with different type

df_db = pd.read_sql_table('foo_table',postgres_uri,schema='data_test',index_col='info_date')

nums
info_date
2018-01-01 00:00:00+00:00 0
2018-01-01 06:00:00+00:00 1
2018-01-01 12:00:00+00:00 2

As you can see `info_date` is of type `datetime64[ns, UTC]`

not sure if it's a sqlalchemy or pandas question.
reported because of my question on SO