From 1197520921c2e22f47f8778f5b9ab45126c9c9e1 Mon Sep 17 00:00:00 2001 From: Evgeniy Antonyuk Date: Thu, 4 Sep 2025 15:08:48 +0200 Subject: [PATCH] Add support for specifying schema in psql --- README.md | 3 +++ run-document-server.sh | 42 +++++++++++++++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ff165a6..8983bc1 100644 --- a/README.md +++ b/README.md @@ -191,6 +191,9 @@ Below is the complete list of parameters that can be set using environment varia - **DB_NAME**: The name of a database to use. Should be existing on container startup. - **DB_USER**: The new user name with superuser permissions for the database account. - **DB_PWD**: The password set for the database account. +- **DB_SCHEMA**: Database schema name (optional). + - **PostgreSQL** — schema for [search_path](https://www.postgresql.org/docs/current/ddl-schemas.html#DDL-SCHEMAS-PATH), default `public`. + - **MSSQL** — schema to set as [DEFAULT_SCHEMA](https://learn.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-ver17#default_schema---schema_name--null-), default `dbo`. - **AMQP_URI**: The [AMQP URI](https://www.rabbitmq.com/uri-spec.html "RabbitMQ URI Specification") to connect to message broker server. - **AMQP_TYPE**: The message broker type. Supported values are `rabbitmq` or `activemq`. Defaults to `rabbitmq`. - **REDIS_SERVER_HOST**: The IP address or the name of the host where the Redis server is running. diff --git a/run-document-server.sh b/run-document-server.sh index a733a62..8945804 100644 --- a/run-document-server.sh +++ b/run-document-server.sh @@ -450,9 +450,7 @@ create_postgresql_db(){ } create_mssql_db(){ - MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT" - - $MSSQL -U $DB_USER -P "$DB_PWD" -C -Q "IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = '$DB_NAME') BEGIN CREATE DATABASE $DB_NAME; END" + ${MSSQL/ -d $DB_NAME/} -b -Q "IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = '$DB_NAME') BEGIN CREATE DATABASE [$DB_NAME]; END" } create_db_tbl() { @@ -489,6 +487,22 @@ upgrade_db_tbl() { esac } +postgresql_check_schema(){ + DB_SCHEMA=${DB_SCHEMA:-$(${JSON} services.CoAuthoring.sql.pgPoolExtraOptions.options 2>/dev/null | sed -n 's/.*search_path=\([^, ]*\).*/\1/p')} + if [ -n "${DB_SCHEMA}" ]; then + export PGOPTIONS="-c search_path=${DB_SCHEMA}" + $PSQL -c "CREATE SCHEMA IF NOT EXISTS ${DB_SCHEMA};" >/dev/null 2>&1 + ${JSON} -I -e "this.services.CoAuthoring.sql.pgPoolExtraOptions.options = '${PGOPTIONS}'" + fi +} + +mssql_check_schema(){ + if [ -n "${DB_SCHEMA}" ]; then + ${MSSQL} -b -Q "DECLARE @s sysname=N'${DB_SCHEMA}'; IF SCHEMA_ID(@s) IS NULL BEGIN DECLARE @sql nvarchar(max); SET @sql=N'CREATE SCHEMA '+QUOTENAME(@s)+N' AUTHORIZATION '+QUOTENAME(N'${DB_USER}'); EXEC(@sql); END" + ${MSSQL} -b -Q "DECLARE @s sysname=N'${DB_SCHEMA}'; DECLARE @u sysname=N'${DB_USER}'; IF USER_ID(@u) IS NOT NULL BEGIN DECLARE @sql nvarchar(max); SET @sql=N'ALTER USER '+QUOTENAME(@u)+N' WITH DEFAULT_SCHEMA = '+QUOTENAME(@s); EXEC(@sql); END" + fi +} + upgrade_postgresql_tbl() { if [ -n "$DB_PWD" ]; then export PGPASSWORD=$DB_PWD @@ -496,6 +510,7 @@ upgrade_postgresql_tbl() { PSQL="psql -q -h$DB_HOST -p$DB_PORT -d$DB_NAME -U$DB_USER -w" + postgresql_check_schema $PSQL -f "$APP_DIR/server/schema/postgresql/removetbl.sql" $PSQL -f "$APP_DIR/server/schema/postgresql/createdb.sql" } @@ -509,9 +524,13 @@ upgrade_mysql_tbl() { } upgrade_mssql_tbl() { - CONN_PARAMS="-d $DB_NAME -U $DB_USER -P "$DB_PWD" -C" - MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT $CONN_PARAMS" + if [ -n "$DB_PWD" ]; then + export SQLCMDPASSWORD=$DB_PWD + fi + MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT -d $DB_NAME -U $DB_USER -C" + + mssql_check_schema $MSSQL < "$APP_DIR/server/schema/mssql/removetbl.sql" >/dev/null 2>&1 $MSSQL < "$APP_DIR/server/schema/mssql/createdb.sql" >/dev/null 2>&1 } @@ -529,6 +548,8 @@ create_postgresql_tbl() { fi PSQL="psql -q -h$DB_HOST -p$DB_PORT -d$DB_NAME -U$DB_USER -w" + + postgresql_check_schema $PSQL -f "$APP_DIR/server/schema/postgresql/createdb.sql" } @@ -543,11 +564,14 @@ create_mysql_tbl() { } create_mssql_tbl() { + if [ -n "$DB_PWD" ]; then + export SQLCMDPASSWORD=$DB_PWD + fi + + MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT -d $DB_NAME -U $DB_USER -C" + create_mssql_db - - CONN_PARAMS="-d $DB_NAME -U $DB_USER -P "$DB_PWD" -C" - MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT $CONN_PARAMS" - + mssql_check_schema $MSSQL < "$APP_DIR/server/schema/mssql/createdb.sql" >/dev/null 2>&1 }