feat: add TimescaleDB to nix dev shell
- Use postgresql_16.withPackages to include timescaledb extension - Add shared_preload_libraries to PostgreSQL config - Enable TimescaleDB for both dev and test databases - Disable TimescaleDB telemetry in dev
This commit is contained in:
parent
e9e1a29684
commit
6fd643a380
1 changed files with 23 additions and 15 deletions
|
|
@ -26,6 +26,9 @@
|
|||
}:
|
||||
|
||||
let
|
||||
# PostgreSQL with TimescaleDB extension
|
||||
pg = postgresql_16.withPackages (ps: [ ps.timescaledb ]);
|
||||
|
||||
# PostgreSQL data directory (local to project)
|
||||
pgDataDir = ".nix-postgres";
|
||||
pgPort = "5432";
|
||||
|
|
@ -53,7 +56,7 @@ let
|
|||
# Initialize PostgreSQL if needed
|
||||
if [ ! -d "${pgDataDir}" ]; then
|
||||
echo "📦 Initializing PostgreSQL database..."
|
||||
${postgresql_16}/bin/initdb -D ${pgDataDir} -U $USER --encoding=UTF8 --locale=en_US.UTF-8
|
||||
${pg}/bin/initdb -D ${pgDataDir} -U $USER --encoding=UTF8 --locale=en_US.UTF-8
|
||||
|
||||
# Configure PostgreSQL
|
||||
cat >> ${pgDataDir}/postgresql.conf << EOF
|
||||
|
|
@ -63,20 +66,23 @@ let
|
|||
fsync = off # Faster for development (DO NOT use in production)
|
||||
synchronous_commit = off
|
||||
full_page_writes = off
|
||||
# TimescaleDB
|
||||
shared_preload_libraries = 'timescaledb'
|
||||
timescaledb.telemetry_level = off
|
||||
EOF
|
||||
fi
|
||||
|
||||
# Check if PostgreSQL is already running on this port
|
||||
if ${postgresql_16}/bin/pg_isready -h ${pgHost} -p ${pgPort} > /dev/null 2>&1; then
|
||||
if ${pg}/bin/pg_isready -h ${pgHost} -p ${pgPort} > /dev/null 2>&1; then
|
||||
echo "✓ PostgreSQL already running on port ${pgPort}"
|
||||
else
|
||||
# Start PostgreSQL
|
||||
echo "🐘 Starting PostgreSQL on port ${pgPort}..."
|
||||
${postgresql_16}/bin/pg_ctl -D ${pgDataDir} -l ${pgDataDir}/logfile -o "-p ${pgPort}" start
|
||||
${pg}/bin/pg_ctl -D ${pgDataDir} -l ${pgDataDir}/logfile -o "-p ${pgPort}" start
|
||||
|
||||
# Wait for PostgreSQL to be ready
|
||||
for i in {1..30}; do
|
||||
if ${postgresql_16}/bin/pg_isready -h ${pgHost} -p ${pgPort} > /dev/null 2>&1; then
|
||||
if ${pg}/bin/pg_isready -h ${pgHost} -p ${pgPort} > /dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
if [ $i -eq 30 ]; then
|
||||
|
|
@ -90,22 +96,24 @@ let
|
|||
fi
|
||||
|
||||
# Create postgres role if it doesn't exist (needed by some tools)
|
||||
${postgresql_16}/bin/psql -h ${pgHost} -p ${pgPort} -U $USER -d postgres -tc \
|
||||
${pg}/bin/psql -h ${pgHost} -p ${pgPort} -U $USER -d postgres -tc \
|
||||
"SELECT 1 FROM pg_roles WHERE rolname='postgres'" | grep -q 1 || \
|
||||
${postgresql_16}/bin/psql -h ${pgHost} -p ${pgPort} -U $USER -d postgres -c \
|
||||
${pg}/bin/psql -h ${pgHost} -p ${pgPort} -U $USER -d postgres -c \
|
||||
"CREATE ROLE postgres WITH SUPERUSER LOGIN;"
|
||||
|
||||
# Create development and test databases
|
||||
for db in towerops_dev towerops_test; do
|
||||
${postgresql_16}/bin/psql -h ${pgHost} -p ${pgPort} -U $USER -d postgres -tc \
|
||||
${pg}/bin/psql -h ${pgHost} -p ${pgPort} -U $USER -d postgres -tc \
|
||||
"SELECT 1 FROM pg_database WHERE datname='$db'" | grep -q 1 || \
|
||||
${postgresql_16}/bin/createdb -h ${pgHost} -p ${pgPort} -U $USER $db
|
||||
${pg}/bin/createdb -h ${pgHost} -p ${pgPort} -U $USER $db
|
||||
done
|
||||
|
||||
# Enable TimescaleDB extension (dev database only, test uses plain PostgreSQL)
|
||||
${postgresql_16}/bin/psql -h ${pgHost} -p ${pgPort} -U $USER -d towerops_dev -c \
|
||||
"CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" 2>/dev/null || \
|
||||
echo "⚠️ TimescaleDB not available (optional for development)"
|
||||
# Enable TimescaleDB extension for dev and test databases
|
||||
for db in towerops_dev towerops_test; do
|
||||
${pg}/bin/psql -h ${pgHost} -p ${pgPort} -U $USER -d $db -c \
|
||||
"CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" 2>/dev/null || \
|
||||
echo "⚠️ TimescaleDB not available for $db (optional)"
|
||||
done
|
||||
|
||||
echo "✓ PostgreSQL started successfully"
|
||||
|
||||
|
|
@ -155,7 +163,7 @@ let
|
|||
|
||||
# Stop PostgreSQL
|
||||
if [ -d "${pgDataDir}" ]; then
|
||||
${postgresql_16}/bin/pg_ctl -D ${pgDataDir} stop -m fast 2>/dev/null || true
|
||||
${pg}/bin/pg_ctl -D ${pgDataDir} stop -m fast 2>/dev/null || true
|
||||
echo "✓ PostgreSQL stopped"
|
||||
fi
|
||||
|
||||
|
|
@ -211,8 +219,8 @@ mkShell {
|
|||
# Elixir/Erlang
|
||||
elixir
|
||||
|
||||
# Databases
|
||||
postgresql_16
|
||||
# Databases (PostgreSQL with TimescaleDB)
|
||||
pg
|
||||
redis
|
||||
|
||||
# SNMP tools
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue