aiida.manage.external package#

Submodules#

Provides an API for postgres database maintenance tasks.

This API creates and drops postgres users and databases used by the verdi quicksetup commandline tool. It allows convenient access to this functionality from within python without knowing details about how postgres is installed by default on various systems. If the postgres setup is not the default installation, additional information needs to be provided.

class aiida.manage.external.postgres.Postgres(dbinfo=None, **kwargs)[source]#

Bases: PGSU

Adds convenience functions to pgsu.PGSU.

Provides convenience functions for
  • creating/dropping users

  • creating/dropping databases

etc.

Example:

postgres = Postgres()
postgres.create_dbuser('username', 'password')
if not postgres.db_exists('dbname'):
    postgres.create_db('username', 'dbname')
__init__(dbinfo=None, **kwargs)[source]#

See documentation of pgsu.PGSU.__init__().

__module__ = 'aiida.manage.external.postgres'#
can_user_authenticate(dbuser, dbpass)[source]#

Check whether the database user credentials are valid.

Checks whether dbuser has access to the template1 postgres database via psycopg2.

Parameters:
  • dbuser – the database user

  • dbpass – the database password

Returns:

True if the credentials are valid, False otherwise

copy_db(src_db, dest_db, dbuser)[source]#
create_db(dbuser, dbname)[source]#

Create a database in postgres

Parameters:
  • dbuser (str) – Name of the user which should own the db.

  • dbname (str) – Name of the database.

create_dbuser(dbuser, dbpass, privileges='')[source]#

Create a database user in postgres

Parameters:
  • dbuser (str) – Name of the user to be created.

  • dbpass (str) – Password the user should be given.

Raises:

psycopg2.errors.DuplicateObject if user already exists and self.connection_mode == PostgresConnectionMode.PSYCOPG

create_dbuser_db_safe(dbname, dbuser, dbpass)[source]#

Create DB and user + grant privileges.

An existing database user is reused, if it is able to authenticate. If not, a new username is generated on the fly.

An existing database is not reused (unsafe), a new database name is generated on the fly.

Parameters:
  • dbname (str) – Name of the database.

  • dbuser (str) – Name of the user which should own the db.

  • dbpass (str) – Password the user should be given.

Returns:

(dbuser, dbname)

db_exists(dbname)[source]#

Check wether a postgres database with dbname exists

Parameters:

dbname (str) – Name of the database to check for

Returns:

(bool), True if database exists, False otherwise

property dbinfo#

Alias for Postgres.dsn.

dbuser_exists(dbuser)[source]#

Find out if postgres user with name dbuser exists

Parameters:

dbuser (str) – database user to check for

Returns:

(bool) True if user exists, False otherwise

drop_db(dbname)[source]#

Drop a database in postgres

Parameters:

dbname (str) – Name of the database.

drop_dbuser(dbuser)[source]#

Drop a database user in postgres

Parameters:

dbuser (str) – Name of the user to be dropped.

find_new_db(start_from='aiida')[source]#

Find database name that does not yet exist.

Generates names of the form “aiida_1”, “aiida_2”, etc. until it finds a name that does not yet exist.

Parameters:

start_from (str) – start from this name

Returns:

dbname

find_new_dbuser(start_from='aiida')[source]#

Find database user that does not yet exist.

Generates names of the form “aiida_1”, “aiida_2”, etc. until it finds a name that does not yet exist.

Parameters:

start_from (str) – start from this name

Returns:

dbuser

classmethod from_profile(profile: Profile, **kwargs)[source]#

Create Postgres instance with dbinfo from AiiDA profile data.

Note: This only uses host and port from the profile, since the others are not going to be relevant for the

database superuser.

Parameters:
  • profile – AiiDA profile instance

  • kwargs – keyword arguments forwarded to PGSU constructor

Returns:

Postgres instance pre-populated with data from AiiDA profile

property host_for_psycopg2#

Return correct host for psycopg2 connection (as required by regular AiiDA operation).

property port_for_psycopg2#

Return port for psycopg2 connection (as required by regular AiiDA operation).

aiida.manage.external.postgres.manual_setup_instructions(db_username, db_name)[source]#

Create a message with instructions for manually creating a database