refactor SQL scripts for consistency and style improvements

This commit is contained in:
Peter Wood
2025-03-06 08:26:39 -05:00
parent b6a6ca3b38
commit 07b8185c35
10 changed files with 192 additions and 168 deletions

View File

@@ -1 +1 @@
CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; create extension IF not exists "uuid-ossp";

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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')

View File

@@ -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;

View File

@@ -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;

View File

@@ -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
)

View File

@@ -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