async def _create_edgedb_template_database(cluster, conn): instance_params = cluster.get_runtime_params().instance_params capabilities = instance_params.capabilities have_c_utf8 = (capabilities & pgcluster.BackendCapabilities.C_UTF8_LOCALE) logger.info('Creating template database...') block = dbops.SQLBlock() dbid = uuidgen.uuid1mc() db = dbops.Database( edbdef.EDGEDB_TEMPLATE_DB, owner=edbdef.EDGEDB_SUPERUSER, is_template=True, template='template0', lc_collate='C', lc_ctype='C.UTF-8' if have_c_utf8 else 'en_US.UTF-8', encoding='UTF8', metadata=dict( id=str(dbid), builtin=True, ), ) dbops.CreateDatabase(db).generate(block) await _execute_block(conn, block) return dbid
async def _ensure_edgedb_database( conn, database, owner, *, cluster, builtin: bool = False, objid: Optional[uuid.UUID] = None, ): result = await _get_db_info(conn, database) if not result: logger.info(f'Creating database: ' f'{database}') block = dbops.SQLBlock() if objid is None: objid = uuidgen.uuid1mc() db = dbops.Database( database, owner=owner, metadata=dict( id=str(objid), builtin=builtin, ), ) dbops.CreateDatabase(db).generate(block) await _execute_block(conn, block)
async def _create_edgedb_database( ctx: BootstrapContext, database: str, owner: str, *, builtin: bool = False, objid: Optional[uuid.UUID] = None, ) -> uuid.UUID: logger.info(f'Creating database: {database}') block = dbops.SQLBlock() if objid is None: objid = uuidgen.uuid1mc() instance_params = ctx.cluster.get_runtime_params().instance_params db = dbops.Database( ctx.cluster.get_db_name(database), owner=ctx.cluster.get_role_name(owner), metadata=dict( id=str(objid), tenant_id=instance_params.tenant_id, name=database, builtin=builtin, ), ) tpl_db = ctx.cluster.get_db_name(edbdef.EDGEDB_TEMPLATE_DB) dbops.CreateDatabase(db, template=tpl_db).generate(block) await _execute_block(ctx.conn, block) return objid
async def _create_edgedb_template_database( ctx: BootstrapContext, ) -> uuid.UUID: backend_params = ctx.cluster.get_runtime_params() have_c_utf8 = backend_params.has_c_utf8_locale logger.info('Creating template database...') block = dbops.SQLBlock() dbid = uuidgen.uuid1mc() db = dbops.Database( ctx.cluster.get_db_name(edbdef.EDGEDB_TEMPLATE_DB), owner=ctx.cluster.get_role_name(edbdef.EDGEDB_SUPERUSER), is_template=True, lc_collate='C', lc_ctype='C.UTF-8' if have_c_utf8 else 'en_US.UTF-8', encoding='UTF8', metadata=dict( id=str(dbid), tenant_id=backend_params.tenant_id, name=edbdef.EDGEDB_TEMPLATE_DB, builtin=True, ), ) dbops.CreateDatabase(db, template='template0').generate(block) await _execute_block(ctx.conn, block) return dbid
async def _ensure_edgedb_database(conn, database, owner, *, cluster): result = await _get_db_info(conn, database) if not result: logger.info( f'Creating database: ' f'{database}') block = dbops.SQLBlock() db = dbops.Database(database, owner=owner) dbops.CreateDatabase(db).generate(block) await _execute_block(conn, block)
async def _ensure_edgedb_template_database(cluster, conn): result = await _get_db_info(conn, edbdef.EDGEDB_TEMPLATE_DB) if not result: logger.info('Creating template database...') block = dbops.SQLBlock() dbid = uuidgen.uuid1mc() db = dbops.Database( edbdef.EDGEDB_TEMPLATE_DB, owner=edbdef.EDGEDB_SUPERUSER, is_template=True, template='template0', lc_collate='C', lc_ctype=('C.UTF-8' if cluster.supports_c_utf8_locale() else 'en_US.UTF-8'), encoding='UTF8', metadata=dict( id=str(dbid), builtin=True, ), ) dbops.CreateDatabase(db).generate(block) await _execute_block(conn, block) return dbid else: alter = [] alter_owner = False if not result['datistemplate']: alter.append('IS_TEMPLATE = true') if result['rolname'] != edbdef.EDGEDB_SUPERUSER: alter_owner = True if alter or alter_owner: logger.info('Altering template database parameters...') if alter: await _execute( conn, 'ALTER DATABASE {} WITH {}'.format( edbdef.EDGEDB_TEMPLATE_DB, ' '.join(alter))) if alter_owner: await _execute( conn, 'ALTER DATABASE {} OWNER TO {}'.format( edbdef.EDGEDB_TEMPLATE_DB, edbdef.EDGEDB_SUPERUSER)) return None
async def _create_edgedb_database( conn, database, owner, *, builtin: bool = False, objid: Optional[uuid.UUID] = None, ) -> uuid.UUID: logger.info(f'Creating database: {database}') block = dbops.SQLBlock() if objid is None: objid = uuidgen.uuid1mc() db = dbops.Database( database, owner=owner, metadata=dict( id=str(objid), builtin=builtin, ), ) dbops.CreateDatabase(db).generate(block) await _execute_block(conn, block) return objid
async def _ensure_edgedb_database(conn, database, owner, *, cluster): result = await _get_db_info(conn, database) if not result: logger.info(f'Creating database: ' f'{database}') block = dbops.SQLBlock() db = dbops.Database(database, owner=owner) dbops.CreateDatabase(db).generate(block) await _execute_block(conn, block) if owner != edgedb_defines.EDGEDB_SUPERUSER: block = dbops.SQLBlock() reassign = dbops.ReassignOwned(edgedb_defines.EDGEDB_SUPERUSER, owner) reassign.generate(block) dbconn = await cluster.connect( database=database, user=edgedb_defines.EDGEDB_SUPERUSER) try: await _execute_block(dbconn, block) finally: await dbconn.close()