This commit is contained in:
@@ -1,17 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Create the target database if it doesn't exist
|
# Check if database exists
|
||||||
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
|
if ! psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -tAc "SELECT 1 FROM pg_database WHERE datname = '$TARGET_DB_NAME'" | grep -q 1; then
|
||||||
DO
|
# Create the target database if it doesn't exist
|
||||||
\$do\$
|
createdb -U "$POSTGRES_USER" -O "$POSTGRES_USER" "$TARGET_DB_NAME"
|
||||||
BEGIN
|
fi
|
||||||
IF NOT EXISTS (SELECT FROM pg_database WHERE datname = '$TARGET_DB_NAME') THEN
|
|
||||||
CREATE DATABASE $TARGET_DB_NAME OWNER $POSTGRES_USER;
|
|
||||||
END IF;
|
|
||||||
END
|
|
||||||
\$do\$;
|
|
||||||
EOSQL
|
|
||||||
|
|
||||||
# Enable the pgvector extension on both databases
|
# Enable the pgvector extension on both databases
|
||||||
for DB in "$POSTGRES_DB" "$TARGET_DB_NAME"; do
|
for DB in "$POSTGRES_DB" "$TARGET_DB_NAME"; do
|
||||||
@@ -28,4 +22,4 @@ else
|
|||||||
echo "No SOURCE_DB_URL provided, skipping initial refresh"
|
echo "No SOURCE_DB_URL provided, skipping initial refresh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Database initialization completed at $(date)"
|
echo "Database initialization completed at $(date)"
|
||||||
|
|||||||
@@ -23,10 +23,16 @@ EOSQL
|
|||||||
|
|
||||||
# Drop and recreate the target database
|
# Drop and recreate the target database
|
||||||
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
|
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
|
||||||
DROP DATABASE IF EXISTS $TARGET_DB_NAME;
|
SELECT pg_terminate_backend(pid)
|
||||||
CREATE DATABASE $TARGET_DB_NAME OWNER $POSTGRES_USER;
|
FROM pg_stat_activity
|
||||||
|
WHERE datname = '$TARGET_DB_NAME'
|
||||||
|
AND pid != pg_backend_pid();
|
||||||
EOSQL
|
EOSQL
|
||||||
|
|
||||||
|
# Drop and create database as separate commands
|
||||||
|
dropdb -U "$POSTGRES_USER" --if-exists "$TARGET_DB_NAME"
|
||||||
|
createdb -U "$POSTGRES_USER" -O "$POSTGRES_USER" "$TARGET_DB_NAME"
|
||||||
|
|
||||||
# Copy the database if SOURCE_DB_URL is provided
|
# Copy the database if SOURCE_DB_URL is provided
|
||||||
if [ ! -z "$SOURCE_DB_URL" ]; then
|
if [ ! -z "$SOURCE_DB_URL" ]; then
|
||||||
echo "Copying database from $SOURCE_DB_URL to $TARGET_DB_NAME..."
|
echo "Copying database from $SOURCE_DB_URL to $TARGET_DB_NAME..."
|
||||||
@@ -50,9 +56,22 @@ if [ ! -z "$SOURCE_DB_URL" ]; then
|
|||||||
EXECUTE 'ALTER SEQUENCE public.' || quote_ident(r.sequence_name) || ' OWNER TO $POSTGRES_USER';
|
EXECUTE 'ALTER SEQUENCE public.' || quote_ident(r.sequence_name) || ' OWNER TO $POSTGRES_USER';
|
||||||
END LOOP;
|
END LOOP;
|
||||||
|
|
||||||
FOR r IN SELECT typname FROM pg_type WHERE typnamespace = 'public'::regnamespace
|
-- Handle regular types, excluding arrays and special types
|
||||||
|
FOR r IN SELECT t.typname
|
||||||
|
FROM pg_type t
|
||||||
|
LEFT JOIN pg_type arr ON arr.typelem = t.oid
|
||||||
|
WHERE t.typnamespace = 'public'::regnamespace
|
||||||
|
AND t.typtype NOT IN ('a', 'c') -- Exclude arrays and composite types
|
||||||
|
AND NOT EXISTS (
|
||||||
|
SELECT 1 FROM pg_type arr
|
||||||
|
WHERE arr.typarray = t.oid
|
||||||
|
)
|
||||||
LOOP
|
LOOP
|
||||||
EXECUTE 'ALTER TYPE public.' || quote_ident(r.typname) || ' OWNER TO $POSTGRES_USER';
|
BEGIN
|
||||||
|
EXECUTE 'ALTER TYPE public.' || quote_ident(r.typname) || ' OWNER TO $POSTGRES_USER';
|
||||||
|
EXCEPTION WHEN OTHERS THEN
|
||||||
|
RAISE NOTICE 'Could not alter ownership of type %: %', r.typname, SQLERRM;
|
||||||
|
END;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
END
|
END
|
||||||
\$\$;
|
\$\$;
|
||||||
@@ -61,4 +80,4 @@ EOSQL
|
|||||||
echo "Database refresh completed successfully at $(date)"
|
echo "Database refresh completed successfully at $(date)"
|
||||||
else
|
else
|
||||||
echo "No SOURCE_DB_URL provided, skipping database refresh"
|
echo "No SOURCE_DB_URL provided, skipping database refresh"
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user