Add PostgreSQL support
Therefore add migration scripts and default connection settings. Also add a draft chapter in the documentation about how to setup the database . Make HSQLDB the default for integration tests.
This commit is contained in:
17
doc/README
17
doc/README
@@ -11,3 +11,20 @@
|
|||||||
4. Architectural overview
|
4. Architectural overview
|
||||||
5. Account types
|
5. Account types
|
||||||
6. Booking rules
|
6. Booking rules
|
||||||
|
7. Setup
|
||||||
|
|
||||||
|
|
||||||
|
7. Setup
|
||||||
|
========
|
||||||
|
This chapter explains how to setup a financer instance. It requires PostgreSQL as a database backend and a Java
|
||||||
|
Servlet Container (e.g. Apache Tomcat) as a runtime environment.
|
||||||
|
|
||||||
|
7.1 Database setup
|
||||||
|
------------------
|
||||||
|
First install PostgreSQL. Then create a user for financer:
|
||||||
|
sudo -iu postgres
|
||||||
|
createuser --interactive
|
||||||
|
Enter 'financer' as role name and make it superuser. Then create the actual database:
|
||||||
|
createdb financer
|
||||||
|
Naming both, the user and the database, 'financer' is the expected default. If you want any other names you need
|
||||||
|
to adjust the database connection settings of the financer application.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
spring.flyway.locations=classpath:/database/hsqldb
|
spring.flyway.locations=classpath:/database/hsqldb,classpath:/database/common
|
||||||
|
|
||||||
# DataSource
|
# DataSource
|
||||||
#spring.datasource.url=jdbc:hsqldb:file:/tmp/financer
|
#spring.datasource.url=jdbc:hsqldb:file:/tmp/financer
|
||||||
|
|||||||
@@ -1 +1,7 @@
|
|||||||
spring.flyway.locations=classpath:/database/postgres
|
spring.flyway.locations=classpath:/database/postgres,classpath:/database/common
|
||||||
|
|
||||||
|
spring.datasource.url=jdbc:postgresql://localhost/financer
|
||||||
|
spring.datasource.username=financer
|
||||||
|
|
||||||
|
# See https://github.com/spring-projects/spring-boot/issues/12007
|
||||||
|
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
|
||||||
15
src/main/resources/database/common/V1_0_1__initData.sql
Normal file
15
src/main/resources/database/common/V1_0_1__initData.sql
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
-- Accounts
|
||||||
|
INSERT INTO account ("key", type, status, current_balance)
|
||||||
|
VALUES ('accounts.checkaccount', 'BANK', 'OPEN', 0);
|
||||||
|
|
||||||
|
INSERT INTO account ("key", type, status, current_balance)
|
||||||
|
VALUES ('accounts.income', 'INCOME', 'OPEN', 0);
|
||||||
|
|
||||||
|
INSERT INTO account ("key", type, status, current_balance)
|
||||||
|
VALUES ('accounts.cash', 'CASH', 'OPEN', 0);
|
||||||
|
|
||||||
|
INSERT INTO account ("key", type, status, current_balance)
|
||||||
|
VALUES ('accounts.start', 'START', 'OPEN', 0);
|
||||||
|
|
||||||
|
INSERT INTO account ("key", type, status, current_balance)
|
||||||
|
VALUES ('accounts.rent', 'EXPENSE', 'OPEN', 0);
|
||||||
@@ -43,19 +43,3 @@ CREATE TABLE "transaction" ( --escape keyword "transaction"
|
|||||||
CONSTRAINT fk_transaction_to_account FOREIGN KEY (to_account_id) REFERENCES account (id),
|
CONSTRAINT fk_transaction_to_account FOREIGN KEY (to_account_id) REFERENCES account (id),
|
||||||
CONSTRAINT fk_transaction_recurring_transaction FOREIGN KEY (recurring_transaction_id) REFERENCES recurring_transaction (id)
|
CONSTRAINT fk_transaction_recurring_transaction FOREIGN KEY (recurring_transaction_id) REFERENCES recurring_transaction (id)
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Accounts
|
|
||||||
INSERT INTO account (id, "key", type, status, current_balance)
|
|
||||||
VALUES (1, 'accounts.checkaccount', 'BANK', 'OPEN', 0); -- insert first with ID 1 so we get predictable numbering
|
|
||||||
|
|
||||||
INSERT INTO account ("key", type, status, current_balance)
|
|
||||||
VALUES ('accounts.income', 'INCOME', 'OPEN', 0);
|
|
||||||
|
|
||||||
INSERT INTO account ("key", type, status, current_balance)
|
|
||||||
VALUES ('accounts.cash', 'CASH', 'OPEN', 0);
|
|
||||||
|
|
||||||
INSERT INTO account ("key", type, status, current_balance)
|
|
||||||
VALUES ('accounts.start', 'START', 'OPEN', 0);
|
|
||||||
|
|
||||||
INSERT INTO account ("key", type, status, current_balance)
|
|
||||||
VALUES ('accounts.rent', 'EXPENSE', 'OPEN', 0);
|
|
||||||
45
src/main/resources/database/postgres/V1_0_0__init.sql
Normal file
45
src/main/resources/database/postgres/V1_0_0__init.sql
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
--
|
||||||
|
-- This file contains the basic initialization of the financer schema and basic init data
|
||||||
|
--
|
||||||
|
|
||||||
|
-- Account table
|
||||||
|
CREATE TABLE account (
|
||||||
|
id BIGINT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||||||
|
"key" VARCHAR(1000) NOT NULL, --escape keyword "key"
|
||||||
|
type VARCHAR(255) NOT NULL,
|
||||||
|
status VARCHAR(255) NOT NULL,
|
||||||
|
current_balance BIGINT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT un_account_name_key UNIQUE ("key")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Recurring transaction table
|
||||||
|
CREATE TABLE recurring_transaction (
|
||||||
|
id BIGINT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||||||
|
from_account_id BIGINT NOT NULL,
|
||||||
|
to_account_id BIGINT NOT NULL,
|
||||||
|
description VARCHAR(1000),
|
||||||
|
amount BIGINT NOT NULL,
|
||||||
|
interval_type VARCHAR(255) NOT NULL,
|
||||||
|
first_occurrence DATE NOT NULL,
|
||||||
|
last_occurrence DATE,
|
||||||
|
holiday_weekend_type VARCHAR(255) NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT fk_recurring_transaction_from_account FOREIGN KEY (from_account_id) REFERENCES account (id),
|
||||||
|
CONSTRAINT fk_recurring_transaction_to_account FOREIGN KEY (to_account_id) REFERENCES account (id)
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Transaction table
|
||||||
|
CREATE TABLE "transaction" ( --escape keyword "transaction"
|
||||||
|
id BIGINT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||||||
|
from_account_id BIGINT NOT NULL,
|
||||||
|
to_account_id BIGINT NOT NULL,
|
||||||
|
"date" DATE NOT NULL, --escape keyword "date"
|
||||||
|
description VARCHAR(1000),
|
||||||
|
amount BIGINT NOT NULL,
|
||||||
|
recurring_transaction_id BIGINT,
|
||||||
|
|
||||||
|
CONSTRAINT fk_transaction_from_account FOREIGN KEY (from_account_id) REFERENCES account (id),
|
||||||
|
CONSTRAINT fk_transaction_to_account FOREIGN KEY (to_account_id) REFERENCES account (id),
|
||||||
|
CONSTRAINT fk_transaction_recurring_transaction FOREIGN KEY (recurring_transaction_id) REFERENCES recurring_transaction (id)
|
||||||
|
);
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
spring.profiles.active=hsqldb,dev
|
||||||
|
|
||||||
spring.datasource.url=jdbc:hsqldb:mem:.
|
spring.datasource.url=jdbc:hsqldb:mem:.
|
||||||
spring.datasource.username=sa
|
spring.datasource.username=sa
|
||||||
spring.flyway.locations=classpath:/database/hsqldb,classpath:/database/hsqldb/integration
|
spring.flyway.locations=classpath:/database/hsqldb,classpath:/database/hsqldb/integration,classpath:/database/common
|
||||||
|
|||||||
Reference in New Issue
Block a user