На postgres три базы данных обычно присутствуют по умолчанию.Если вы можете подключиться как суперпользователь (например, роль postgres
), то вы можете подключиться к базам данных postgres
или template1
.По умолчанию pg_hba.conf разрешает использовать роль postgres
только пользователю unix с именем postgres
, поэтому самое простое - просто стать этим пользователем.В любом случае, как обычно, создайте движок с пользователем, у которого есть права на создание базы данных:
>>> engine = sqlalchemy.create_engine("postgres://postgres@/postgres")
Однако вы не можете использовать engine.execute()
, поскольку postgres не позволяет создавать базы данных внутри транзакций,и sqlalchemy всегда пытается выполнить запросы в транзакции.Чтобы обойти это, получите базовое соединение от движка:
>>> conn = engine.connect()
Но соединение все равно будет внутри транзакции, поэтому вы должны завершить открытую транзакцию с помощью commit
:
>>> conn.execute("commit")
И затем вы можете приступить к созданию базы данных, используя для нее соответствующую команду PostgreSQL.
>>> conn.execute("create database test")
>>> conn.close()