Skip to content

Conversion problem between interval and timedelta #150

Closed
@lelit

Description

@lelit

I'm using asyncpg 0.11.0 and I hit a problem with a table containing an INTERVAL column.

Consider the following script:

import asyncio
import asyncpg


SETUP_SQL = """\
CREATE TABLE schedules (
  id serial not null primary key,
  name text,
  delay interval
)
"""

INSERT_SQL = """
INSERT INTO schedules (name, delay)
VALUES ('Foobar', '5 years')
"""

FETCH_SQL = """
SELECT delay
FROM schedules
WHERE name = 'Foobar'
"""

CLEANUP_SQL = """
DROP TABLE schedules
"""

async def run():
    conn = await asyncpg.connect(user='lele', password='lele',
                                 database='test', host='127.0.0.1')

    await conn.execute(SETUP_SQL)
    try:
        await conn.execute(INSERT_SQL)
        delay = await conn.fetchval(FETCH_SQL)
        print(delay)
    finally:
        await conn.execute(CLEANUP_SQL)

    await conn.close()


def main():
    loop = asyncio.get_event_loop()
    loop.run_until_complete(run())


if __name__ == '__main__':
    main()

It creates a sample table and inserts one record, with a delay value of five years, and executing it I get:

$ python test.py 
1800 days, 0:00:00

Commenting out the CLEANUP_SQL execution, with psql I get:

test=# select * from schedules;
 id |  name  |  delay  
----+--------+---------
  1 | Foobar | 5 years

and with pgcli, that uses psycopg2, I get:

lele@test> select * from schedules;
+------+--------+--------------------+
|   id | name   | delay              |
+======+========+====================+
|    1 | Foobar | 1825 days, 0:00:00 |
+------+--------+--------------------+

Why am I getting back 1800 days when using asyncpg?

Metadata

Metadata

Assignees

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