Checking if a postgresql table exists under python (and probably Psycopg2)


Question

How can I determine if a table exists using the Psycopg2 Python library? I want a true or false boolean.

1
42
5/11/2013 4:10:13 PM

Accepted Answer

How about:

>>> import psycopg2
>>> conn = psycopg2.connect("dbname='mydb' user='username' host='localhost' password='foobar'")
>>> cur = conn.cursor()
>>> cur.execute("select * from information_schema.tables where table_name=%s", ('mytable',))
>>> bool(cur.rowcount)
True

An alternative using EXISTS is better in that it doesn't require that all rows be retrieved, but merely that at least one such row exists:

>>> cur.execute("select exists(select * from information_schema.tables where table_name=%s)", ('mytable',))
>>> cur.fetchone()[0]
True
67
9/23/2013 1:35:41 PM

I don't know the psycopg2 lib specifically, but the following query can be used to check for existence of a table:

SELECT EXISTS(SELECT 1 FROM information_schema.tables 
              WHERE table_catalog='DB_NAME' AND 
                    table_schema='public' AND 
                    table_name='TABLE_NAME');

The advantage of using information_schema over selecting directly from the pg_* tables is some degree of portability of the query.


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon