52 lines
1.8 KiB
Bash
52 lines
1.8 KiB
Bash
#!/usr/bin/env bash
|
||
# 本地 PostgreSQL 16 初始化脚本(弃用 Docker,使用本机 Homebrew PG16)
|
||
# 创建 aiaudit 角色与数据库,并安装所需扩展(TimescaleDB / pgvector / btree_gist)。
|
||
#
|
||
# 前置:已通过 Homebrew 安装并启动 postgresql@16、timescaledb、pgvector。
|
||
# 用法:bash infra/postgres/setup_local.sh
|
||
set -euo pipefail
|
||
|
||
DB_NAME="${DB_NAME:-aiaudit}"
|
||
DB_USER="${DB_USER:-aiaudit}"
|
||
DB_PASSWORD="${DB_PASSWORD:-aiaudit_dev}"
|
||
|
||
# 定位本地 PG16 的 psql(Homebrew)
|
||
PG_BIN="$(brew --prefix postgresql@16)/bin"
|
||
export PATH="$PG_BIN:$PATH"
|
||
|
||
echo "==> 使用 psql: $(which psql)"
|
||
|
||
# 以当前系统用户连接默认库(Homebrew PG 默认信任本地超级用户)
|
||
psql postgres <<SQL
|
||
DO \$\$
|
||
BEGIN
|
||
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${DB_USER}') THEN
|
||
CREATE ROLE ${DB_USER} LOGIN PASSWORD '${DB_PASSWORD}';
|
||
END IF;
|
||
END
|
||
\$\$;
|
||
|
||
SELECT 'CREATE DATABASE ${DB_NAME} OWNER ${DB_USER}'
|
||
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '${DB_NAME}')\gexec
|
||
SQL
|
||
|
||
echo "==> 安装扩展到数据库 ${DB_NAME}"
|
||
# pgvector 与 btree_gist 为必需;TimescaleDB 为可选(macOS 本地常因编译问题装不上,
|
||
# 生产 Linux 环境再启用)。缺失 timescaledb 不影响功能,仅少了超表分区/压缩优化。
|
||
psql -d "${DB_NAME}" <<'SQL'
|
||
CREATE EXTENSION IF NOT EXISTS vector;
|
||
CREATE EXTENSION IF NOT EXISTS btree_gist;
|
||
DO $$
|
||
BEGIN
|
||
IF EXISTS (SELECT 1 FROM pg_available_extensions WHERE name = 'timescaledb') THEN
|
||
CREATE EXTENSION IF NOT EXISTS timescaledb;
|
||
RAISE NOTICE 'TimescaleDB 已启用';
|
||
ELSE
|
||
RAISE NOTICE 'TimescaleDB 不可用,跳过(本地开发可忽略)';
|
||
END IF;
|
||
END$$;
|
||
SQL
|
||
|
||
echo "==> 完成。扩展清单:"
|
||
psql -d "${DB_NAME}" -c "SELECT extname, extversion FROM pg_extension ORDER BY extname;"
|