> 
> Now, if you are doing double-entry bookkeeping this doesn't provide
> enough consistency, IMO.  You can't check inside the function to
> ensure that the transaction is balanced.  it would be better to:
> 
> BEGIN;
> SELECT create_transaction(1, current_date, 'Transaction 1', '{{1, 1,
> 50},{1,1,-50}}');
> COMMIT;
> 
> Now for the application, you can create an API that is semantically
> clearer.  But PostgreSQL doesn't provide an easy way of calling
> procedures of this sort out of select/update/insert statements and
> select is the only way to do this.
> 
> 

One option to consider is restricting final tables but making staging tables 
available.  You use normal inserts to build up the staging table and then 
validate and transfer the data to the final table using a function.  In the 
example you can build a work-in-process transaction however you see fit but the 
final real transaction creation process would first confirm that the entry 
balances before copying the records to the transaction table and cleaning up 
the work-in-process table.

David J.



-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

Reply via email to