multitenant: make CREATE SCHEMA call from hobo (#84514)
gitea/hobo/pipeline/head This commit looks good
Details
gitea/hobo/pipeline/head This commit looks good
Details
This commit is contained in:
parent
8917ae5581
commit
1a49608b6a
|
@ -17,4 +17,4 @@ class Command(BaseCommand):
|
|||
print()
|
||||
print(self.style.NOTICE('=== Creating schema ') + self.style.SQL_TABLE(tenant.schema_name))
|
||||
|
||||
tenant.create_schema(check_if_exists=True)
|
||||
tenant.create_schema()
|
||||
|
|
|
@ -73,7 +73,7 @@ class Command(BaseCommand):
|
|||
print()
|
||||
print(msg)
|
||||
with transaction.atomic():
|
||||
tenant.create_schema(check_if_exists=True, legacy_schema_name=legacy_schema)
|
||||
tenant.create_schema(legacy_schema_name=legacy_schema)
|
||||
except Exception as e:
|
||||
if legacy_hostname:
|
||||
os.rename(tenant_dir_tmp, legacy_tenant_dir)
|
||||
|
|
|
@ -4,6 +4,7 @@ import urllib.parse
|
|||
from shutil import rmtree
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.management import call_command
|
||||
from django.db import connection
|
||||
from django.utils import timezone
|
||||
from tenant_schemas.models import TenantMixin
|
||||
|
@ -53,18 +54,21 @@ class Tenant(TenantMixin):
|
|||
return urllib.parse.urljoin(self.get_base_url(), location)
|
||||
|
||||
def create_schema(self, check_if_exists=False, sync_schema=True, verbosity=1, legacy_schema_name=None):
|
||||
if not legacy_schema_name:
|
||||
return super().create_schema(check_if_exists, sync_schema, verbosity)
|
||||
# safety check
|
||||
# safety checks
|
||||
_check_schema_name(self.schema_name)
|
||||
_check_schema_name(legacy_schema_name)
|
||||
if check_if_exists and schema_exists(self.schema_name):
|
||||
_check_schema_name(legacy_schema_name or 'ok')
|
||||
if legacy_schema_name and not schema_exists(legacy_schema_name):
|
||||
return False
|
||||
if not schema_exists(legacy_schema_name):
|
||||
return False
|
||||
# rename schema
|
||||
cursor = connection.cursor()
|
||||
cursor.execute('ALTER SCHEMA %s RENAME TO %s' % (legacy_schema_name, self.schema_name))
|
||||
if legacy_schema_name:
|
||||
# rename schema
|
||||
cursor.execute('ALTER SCHEMA %s RENAME TO %s' % (legacy_schema_name, self.schema_name))
|
||||
else:
|
||||
cursor.execute('CREATE SCHEMA IF NOT EXISTS %s' % self.schema_name)
|
||||
if sync_schema:
|
||||
call_command(
|
||||
'migrate_schemas', schema_name=self.schema_name, interactive=False, verbosity=verbosity
|
||||
)
|
||||
connection.set_schema_to_public()
|
||||
|
||||
def delete(self, force_drop=False, *args, **kwargs):
|
||||
|
|
|
@ -84,7 +84,7 @@ def tenant_factory(transactional_db, tenant_base, settings):
|
|||
schema_name = name.replace('-', '_').replace('.', '_')
|
||||
t = Tenant(domain_url=name, schema_name=schema_name)
|
||||
with transaction.atomic():
|
||||
t.create_schema(check_if_exists=True)
|
||||
t.create_schema()
|
||||
connection.set_schema_to_public()
|
||||
tenants.append(t)
|
||||
return t
|
||||
|
|
Loading…
Reference in New Issue