QAUP_Management/deploy/docker/postgres/init-db.sh

86 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
# PostgreSQL 数据库初始化脚本
# 此脚本在 PostgreSQL 容器首次启动时自动执行
set -e
echo "========================================="
echo "QAUP 数据库初始化开始"
echo "========================================="
# 创建数据库(如果不存在)
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
-- 创建扩展
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE EXTENSION IF NOT EXISTS postgis_topology;
-- 显示扩展信息
SELECT name, default_version, installed_version
FROM pg_available_extensions
WHERE name IN ('postgis', 'postgis_topology');
EOSQL
echo "✓ PostGIS 扩展安装完成"
# 导入数据库架构
if [ -f "/docker-entrypoint-initdb.d/qaup_database_schema.sql" ]; then
echo "导入数据库架构..."
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -f /docker-entrypoint-initdb.d/qaup_database_schema.sql
echo "✓ 数据库架构导入完成"
else
echo "警告: 未找到数据库架构文件"
fi
# 导入初始数据(如果存在)
if [ -f "/docker-entrypoint-initdb.d/initial_data.sql" ]; then
echo "导入初始数据..."
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -f /docker-entrypoint-initdb.d/initial_data.sql
echo "✓ 初始数据导入完成"
fi
# 创建数据库用户和权限设置
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
-- 创建应用用户(如果不存在)
DO \$\$
BEGIN
IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '${APP_DB_USER:-qaup_app}') THEN
CREATE USER ${APP_DB_USER:-qaup_app} WITH PASSWORD '${APP_DB_PASSWORD:-qaup123}';
END IF;
END
\$\$;
-- 授予权限
GRANT CONNECT ON DATABASE ${POSTGRES_DB} TO ${APP_DB_USER:-qaup_app};
GRANT USAGE ON SCHEMA public TO ${APP_DB_USER:-qaup_app};
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO ${APP_DB_USER:-qaup_app};
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO ${APP_DB_USER:-qaup_app};
-- 为未来创建的表设置默认权限
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO ${APP_DB_USER:-qaup_app};
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO ${APP_DB_USER:-qaup_app};
EOSQL
echo "✓ 数据库用户和权限设置完成"
# 显示数据库信息
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
-- 显示数据库基本信息
SELECT
current_database() as database_name,
current_user as current_user,
version() as postgresql_version;
-- 显示表数量
SELECT
schemaname,
COUNT(*) as table_count
FROM pg_tables
WHERE schemaname = 'public'
GROUP BY schemaname;
EOSQL
echo ""
echo "========================================="
echo "QAUP 数据库初始化完成"
echo "========================================="