mirror of
https://github.com/acedanger/budget-database.git
synced 2025-12-06 07:00:14 -08:00
refactor SQL scripts for consistency and style improvements
This commit is contained in:
@@ -1 +1 @@
|
|||||||
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
create extension IF not exists "uuid-ossp";
|
||||||
@@ -1,12 +1,10 @@
|
|||||||
drop function if exists public.get_account_id;
|
drop function if exists public.get_account_id;
|
||||||
|
|
||||||
create or replace function public.get_account_id(
|
create
|
||||||
p_bank_name varchar
|
or replace function public.get_account_id (
|
||||||
, p_bank_account_number varchar
|
p_bank_name varchar,
|
||||||
)
|
p_bank_account_number varchar
|
||||||
returns int
|
) returns int LANGUAGE plpgsql as $$
|
||||||
LANGUAGE plpgsql
|
|
||||||
AS $$
|
|
||||||
declare
|
declare
|
||||||
_account_id int;
|
_account_id int;
|
||||||
|
|
||||||
@@ -30,5 +28,8 @@ return _account_id;
|
|||||||
end;
|
end;
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
GRANT EXECUTE ON function public.get_account_id(varchar, varchar) TO acedanger;
|
grant
|
||||||
GRANT EXECUTE ON function public.get_account_id(varchar, varchar) TO budgetuser;
|
execute on function public.get_account_id (varchar, varchar) to acedanger;
|
||||||
|
|
||||||
|
grant
|
||||||
|
execute on function public.get_account_id (varchar, varchar) to budgetuser;
|
||||||
@@ -1,23 +1,17 @@
|
|||||||
drop function if exists public.get_transactions_for_period;
|
drop function if exists public.get_transactions_for_period;
|
||||||
|
|
||||||
create or replace function public.get_transactions_for_period(
|
create
|
||||||
p_account_name text
|
or replace function public.get_transactions_for_period (p_account_name text, p_start date, p_end date) returns table (
|
||||||
, p_start date
|
bank_name text,
|
||||||
, p_end date
|
account_type text,
|
||||||
)
|
account_number text,
|
||||||
returns table (
|
account_friendly_name text,
|
||||||
bank_name text
|
transaction_date date,
|
||||||
, account_type text
|
transaction_description text,
|
||||||
, account_number text
|
transaction_amount numeric(8, 2),
|
||||||
, account_friendly_name text
|
transaction_day_of_week text,
|
||||||
, transaction_date date
|
running_bal numeric
|
||||||
, transaction_description text
|
) LANGUAGE plpgsql as $$
|
||||||
, transaction_amount numeric(8,2)
|
|
||||||
, transaction_day_of_week text
|
|
||||||
, running_bal numeric
|
|
||||||
)
|
|
||||||
LANGUAGE plpgsql
|
|
||||||
AS $$
|
|
||||||
begin
|
begin
|
||||||
|
|
||||||
raise notice 'FUNCTION: get_transactions';
|
raise notice 'FUNCTION: get_transactions';
|
||||||
@@ -36,5 +30,8 @@ return query
|
|||||||
end;
|
end;
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
GRANT EXECUTE ON function public.get_transactions_for_period(text, date, date) TO acedanger;
|
grant
|
||||||
GRANT EXECUTE ON function public.get_transactions_for_period(text, date, date) TO budgetuser;
|
execute on function public.get_transactions_for_period (text, date, date) to acedanger;
|
||||||
|
|
||||||
|
grant
|
||||||
|
execute on function public.get_transactions_for_period (text, date, date) to budgetuser;
|
||||||
@@ -1,10 +1,8 @@
|
|||||||
|
create
|
||||||
create or replace procedure public.import_transactions_from_csv(
|
or replace procedure public.import_transactions_from_csv (
|
||||||
p_bank_name varchar
|
p_bank_name varchar,
|
||||||
, p_bank_account_number varchar
|
p_bank_account_number varchar
|
||||||
)
|
) language plpgsql as $$
|
||||||
language plpgsql
|
|
||||||
as $$
|
|
||||||
|
|
||||||
declare
|
declare
|
||||||
_acct int;
|
_acct int;
|
||||||
@@ -41,5 +39,8 @@ where coalesce(amount, 0) <> 0;
|
|||||||
end
|
end
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
GRANT EXECUTE ON PROCEDURE public.import_transactions_from_csv(varchar, varchar) TO acedanger;
|
grant
|
||||||
GRANT EXECUTE ON PROCEDURE public.import_transactions_from_csv(varchar, varchar) TO budgetuser;
|
execute on PROCEDURE public.import_transactions_from_csv (varchar, varchar) to acedanger;
|
||||||
|
|
||||||
|
grant
|
||||||
|
execute on PROCEDURE public.import_transactions_from_csv (varchar, varchar) to budgetuser;
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
CREATE OR REPLACE PROCEDURE public.update_budget_from_import(
|
create
|
||||||
p_bank_name varchar
|
or replace PROCEDURE public.update_budget_from_import (
|
||||||
, p_bank_account_number varchar
|
p_bank_name varchar,
|
||||||
)
|
p_bank_account_number varchar
|
||||||
LANGUAGE plpgsql
|
) LANGUAGE plpgsql as $$
|
||||||
AS $$
|
|
||||||
declare
|
declare
|
||||||
_acct int;
|
_acct int;
|
||||||
|
|
||||||
@@ -30,5 +29,8 @@ from public.budgetimport;
|
|||||||
end
|
end
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
GRANT EXECUTE ON PROCEDURE public.update_budget_from_import(varchar, varchar) TO acedanger;
|
grant
|
||||||
GRANT EXECUTE ON PROCEDURE public.update_budget_from_import(varchar, varchar) TO budgetuser;
|
execute on PROCEDURE public.update_budget_from_import (varchar, varchar) to acedanger;
|
||||||
|
|
||||||
|
grant
|
||||||
|
execute on PROCEDURE public.update_budget_from_import (varchar, varchar) to budgetuser;
|
||||||
@@ -1,25 +1,38 @@
|
|||||||
drop table if exists public.accounts cascade;
|
drop table if exists public.accounts cascade;
|
||||||
|
|
||||||
CREATE TABLE public.accounts(
|
create table public.accounts (
|
||||||
acct_id serial,
|
acct_id serial,
|
||||||
acct_bank_name varchar(50) not null,
|
acct_bank_name varchar(50) not null,
|
||||||
acct_type varchar(50) not null,
|
acct_type varchar(50) not null,
|
||||||
acct_number varchar(20) null,
|
acct_number varchar(20) null,
|
||||||
acct_friendly_name varchar(50) null,
|
acct_friendly_name varchar(50) null,
|
||||||
insert_dt_tm timestamp null default now(),
|
created_at timestamp null default now(),
|
||||||
PRIMARY KEY( acct_id )
|
primary key (acct_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Permissions
|
-- Permissions
|
||||||
|
alter table public.accounts OWNER to acedanger;
|
||||||
|
|
||||||
ALTER TABLE public.accounts OWNER TO acedanger;
|
grant all on table public.accounts to acedanger;
|
||||||
GRANT ALL ON TABLE public.accounts TO acedanger;
|
|
||||||
GRANT ALL ON TABLE public.accounts TO budgetuser;
|
grant all on table public.accounts to budgetuser;
|
||||||
|
|
||||||
-- Populate table
|
-- Populate table
|
||||||
truncate public.accounts;
|
truncate public.accounts;
|
||||||
|
|
||||||
INSERT INTO public.accounts (bank_name, account_type, friendly_name, account_number) values
|
insert into
|
||||||
('Bank of America', 'Checking', 'Joint Checking', '4581')
|
public.accounts (
|
||||||
, ('Ally', 'Savings', 'Joint Savings', '9969')
|
bank_name,
|
||||||
, ('Ally', 'Savings', 'Vacation Savings', '6268')
|
account_type,
|
||||||
|
friendly_name,
|
||||||
|
account_number
|
||||||
|
)
|
||||||
|
values
|
||||||
|
(
|
||||||
|
'Bank of America',
|
||||||
|
'Checking',
|
||||||
|
'Joint Checking',
|
||||||
|
'4581'
|
||||||
|
),
|
||||||
|
('Ally', 'Savings', 'Joint Savings', '9969'),
|
||||||
|
('Ally', 'Savings', 'Vacation Savings', '6268')
|
||||||
@@ -1,21 +1,19 @@
|
|||||||
-- public.budgetdetails definition
|
-- public.budgetdetails definition
|
||||||
|
|
||||||
-- Drop table
|
drop table if exists public.budgetdetails cascade;
|
||||||
DROP table if exists public.budgetdetails cascade;
|
|
||||||
|
|
||||||
CREATE TABLE public.budgetdetails (
|
create table public.budgetdetails (
|
||||||
trx_id uuid NOT NULL DEFAULT uuid_generate_v4(),
|
trx_id uuid not null default uuid_generate_v4 (),
|
||||||
trx_description text NOT NULL,
|
trx_description text not null,
|
||||||
trx_date date NOT NULL,
|
trx_date date not null,
|
||||||
trx_amount numeric NOT NULL,
|
trx_amount numeric not null,
|
||||||
acct_id int NULL,
|
acct_id int null,
|
||||||
insert_dt_tm timestamp NULL DEFAULT now(),
|
created_at timestamp null default now(),
|
||||||
primary key (trx_id),
|
primary key (trx_id),
|
||||||
constraint fk_acct foreign key (acct_id) references public.accounts (acct_id) on delete set null
|
constraint fk_acct foreign key (acct_id) references public.accounts (acct_id) on delete set null
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Permissions
|
-- Permissions
|
||||||
|
alter table public.budgetdetails OWNER to acedanger;
|
||||||
ALTER TABLE public.budgetdetails OWNER TO acedanger;
|
grant all on table public.budgetdetails to acedanger;
|
||||||
GRANT ALL ON TABLE public.budgetdetails TO acedanger;
|
grant all on table public.budgetdetails to budgetuser;
|
||||||
GRANT ALL ON TABLE public.budgetdetails TO budgetuser;
|
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
DROP TABLE public.budgetimport;
|
drop table public.budgetimport;
|
||||||
|
|
||||||
create table public.budgetimport (
|
create table public.budgetimport (
|
||||||
dt bpchar(20) NULL,
|
dt bpchar (20) null,
|
||||||
amount numeric(10, 2) NULL,
|
amount numeric(10, 2) null,
|
||||||
description bpchar(200) NULL
|
description bpchar (200) null
|
||||||
);
|
);
|
||||||
|
|
||||||
ALTER TABLE public.budgetimport OWNER TO acedanger;
|
alter table public.budgetimport OWNER to acedanger;
|
||||||
GRANT ALL ON TABLE public.budgetimport TO acedanger;
|
|
||||||
GRANT ALL ON TABLE public.budgetimport TO budgetuser;
|
grant all on table public.budgetimport to acedanger;
|
||||||
|
|
||||||
|
grant all on table public.budgetimport to budgetuser;
|
||||||
@@ -1,26 +1,36 @@
|
|||||||
|
select
|
||||||
|
'Import' as TBL,
|
||||||
select 'Import' as TBL, count(1) as REC_CNT from public.budgetimport
|
count(1) as REC_CNT
|
||||||
|
from
|
||||||
|
public.budgetimport
|
||||||
union all
|
union all
|
||||||
select 'Detail' as TBL, count(1) as REC_CNT from public.budgetdetails;
|
select
|
||||||
|
'Detail' as TBL,
|
||||||
|
count(1) as REC_CNT
|
||||||
|
from
|
||||||
|
public.budgetdetails;
|
||||||
|
|
||||||
|
select
|
||||||
select acct.acct_friendly_name, count(1) as "Number of Transactions"
|
acct.acct_friendly_name,
|
||||||
|
count(1) as "Number of Transactions"
|
||||||
from
|
from
|
||||||
public.budgetdetails trx
|
public.budgetdetails trx
|
||||||
inner join public.accounts acct using (acct_id)
|
inner join public.accounts acct using (acct_id)
|
||||||
group by acct.acct_friendly_name
|
group by
|
||||||
|
|
||||||
|
|
||||||
select
|
|
||||||
acct.acct_friendly_name
|
acct.acct_friendly_name
|
||||||
, extract(year from trx.trx_date) trx_year
|
select
|
||||||
, lower(trx.trx_description) trx_description
|
acct.acct_friendly_name,
|
||||||
, avg(abs(trx.trx_amount))::numeric(7,2) avg_amt
|
extract(
|
||||||
, count(trx.trx_description) rec_cnt
|
year
|
||||||
, min(abs(trx.trx_amount))::numeric(7,2) min_amt
|
from
|
||||||
, max(abs(trx.trx_amount))::numeric(7,2) max_amt
|
trx.trx_date
|
||||||
, sum(abs(trx.trx_amount))::numeric(9,2) ttl_amt
|
) trx_year,
|
||||||
|
lower(trx.trx_description) trx_description,
|
||||||
|
avg(abs(trx.trx_amount))::numeric(7, 2) avg_amt,
|
||||||
|
count(trx.trx_description) rec_cnt,
|
||||||
|
min(abs(trx.trx_amount))::numeric(7, 2) min_amt,
|
||||||
|
max(abs(trx.trx_amount))::numeric(7, 2) max_amt,
|
||||||
|
sum(abs(trx.trx_amount))::numeric(9, 2) ttl_amt
|
||||||
from
|
from
|
||||||
public.budgetdetails trx
|
public.budgetdetails trx
|
||||||
inner join public.accounts acct using (acct_id)
|
inner join public.accounts acct using (acct_id)
|
||||||
@@ -29,35 +39,36 @@ where
|
|||||||
and abs(trx.trx_amount) > 0
|
and abs(trx.trx_amount) > 0
|
||||||
-- and lower(acct.account_friendly_name) like '%savings'
|
-- and lower(acct.account_friendly_name) like '%savings'
|
||||||
group by
|
group by
|
||||||
trx_year, acct.acct_friendly_name, lower(trx_description)
|
trx_year,
|
||||||
|
acct.acct_friendly_name,
|
||||||
|
lower(trx_description)
|
||||||
having
|
having
|
||||||
count(1) > 2
|
count(1) > 2
|
||||||
order by
|
order by
|
||||||
trx_year desc
|
trx_year desc,
|
||||||
, acct.acct_friendly_name
|
acct.acct_friendly_name,
|
||||||
, rec_cnt desc
|
rec_cnt desc,
|
||||||
, lower(trx.trx_description);
|
lower(trx.trx_description);
|
||||||
|
|
||||||
|
|
||||||
select
|
select
|
||||||
bal.account_friendly_name
|
bal.account_friendly_name,
|
||||||
, bal.transaction_date
|
bal.transaction_date,
|
||||||
, bal.transaction_day_of_week
|
bal.transaction_day_of_week,
|
||||||
, age(transaction_date, current_date) as days_from_today
|
age (transaction_date, current_date) as days_from_today,
|
||||||
, bal.transaction_description
|
bal.transaction_description,
|
||||||
, bal.transaction_amount
|
bal.transaction_amount,
|
||||||
, bal.running_bal
|
bal.running_bal
|
||||||
from
|
from
|
||||||
public.runbal bal
|
public.runbal bal
|
||||||
where
|
where
|
||||||
lower(account_friendly_name) = 'joint checking'
|
lower(account_friendly_name) = 'joint checking'
|
||||||
and transaction_date between
|
and transaction_date between (current_date - interval '1 week') and (current_date + interval '3 weeks')::date;
|
||||||
(current_date - interval '1 week')
|
|
||||||
and (
|
|
||||||
current_date + interval '3 weeks'
|
|
||||||
)::date
|
|
||||||
;
|
|
||||||
|
|
||||||
|
select
|
||||||
select *
|
*
|
||||||
from public.get_transactions_for_period('joint checking', '3/1/2023'::date, '3/31/2023'::date)
|
from
|
||||||
|
public.get_transactions_for_period (
|
||||||
|
'joint checking',
|
||||||
|
'3/1/2023'::date,
|
||||||
|
'3/31/2023'::date
|
||||||
|
)
|
||||||
@@ -1,22 +1,21 @@
|
|||||||
drop view if exists public.runbal;
|
drop view if exists public.runbal;
|
||||||
|
|
||||||
create view public.runbal
|
create view public.runbal as
|
||||||
as
|
|
||||||
select
|
select
|
||||||
acct.acct_bank_name as account_bank_name
|
acct.acct_bank_name as account_bank_name,
|
||||||
, acct.acct_type as account_type
|
acct.acct_type as account_type,
|
||||||
, acct.acct_number as account_number
|
acct.acct_number as account_number,
|
||||||
, acct.acct_friendly_name as account_friendly_name
|
acct.acct_friendly_name as account_friendly_name,
|
||||||
, trx.trx_date as transaction_date
|
trx.trx_date as transaction_date,
|
||||||
, trx.trx_description as transaction_description
|
trx.trx_description as transaction_description,
|
||||||
, trx.trx_amount::numeric(8,2) as transaction_amount
|
trx.trx_amount::numeric(8, 2) as transaction_amount,
|
||||||
, to_char(trx.trx_date, 'day') transaction_day_of_week
|
to_char(trx.trx_date, 'day') transaction_day_of_week,
|
||||||
, sum(trx.trx_amount)
|
sum(trx.trx_amount) over (
|
||||||
over(
|
partition by
|
||||||
partition by trx.acct_id
|
trx.acct_id
|
||||||
order by
|
order by
|
||||||
trx.trx_date
|
trx.trx_date,
|
||||||
, trx.trx_amount desc rows unbounded preceding
|
trx.trx_amount desc rows unbounded preceding
|
||||||
) running_bal
|
) running_bal
|
||||||
from
|
from
|
||||||
public.budgetdetails trx
|
public.budgetdetails trx
|
||||||
|
|||||||
Reference in New Issue
Block a user