-
Notifications
You must be signed in to change notification settings - Fork 50
/
build_database_postgresql.sh
executable file
·49 lines (41 loc) · 1.97 KB
/
build_database_postgresql.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/bash
set -e
# This script assumes you have:
# * Postgres client tools installed
# Ubuntu: sudo apt-get install -y postgresql-client libpq-dev
# * The Python libraries in requirements_build_database.in installed
# * A Postgres database server running locally
# * The postgres user password for it is in the environmental variable POSTGRESQL_PASSWORD
# * A database called 'test' can be created and used
#
# If you don't have a server running locally, Docker is a good way to do this. Run:
# docker run -d --name openreferral-database-dump-postgresql -e POSTGRES_PASSWORD=$POSTGRESQL_PASSWORD --publish 5432:5432/tcp postgres:12
# Make sure the version of the server matches the version of the client libraries you have installed, or pg_dump will fail.
# get ready temp dir
echo "READY TEMP DIRECTORY"
mkdir -p tmp_datapackage_for_database_schemas
# make datapackage
echo "MAKE DATAPACKAGE"
code="import os
import sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.join(BASE_DIR,'python'))
import openreferral.utils
openreferral.utils.build_blank_datapackage_for_database_schemas(os.path.join(BASE_DIR, 'datapackage.json'),os.path.join(BASE_DIR, 'tmp_datapackage_for_database_schemas'))"
echo -e "$code" | python
# Create a database
echo "CREATE A DATABASE"
PGPASSWORD=$POSTGRESQL_PASSWORD psql -h 127.0.0.1 -p 5432 -U postgres -w -c "CREATE DATABASE test"
# Create the schema
echo "CREATE THE SCHEMA"
code="from frictionless import Package
package = Package('tmp_datapackage_for_database_schemas/datapackage.json')
package.publish('postgresql://postgres:$POSTGRESQL_PASSWORD@127.0.0.1:5432/test')"
echo -e "$code" | python
# Dump
echo "DUMP THE SCHEMA"
PGPASSWORD=$POSTGRESQL_PASSWORD pg_dump -h 127.0.0.1 -p 5432 -U postgres --no-password -f database/database_postgresql.sql --schema-only test
# Remove dumped lines
echo "EDIT THE SCHEMA"
sed -i '/^\-\- Dumped by /d' database/database_postgresql.sql
sed -i '/^\-\- Dumped from /d' database/database_postgresql.sql