PL/pgSQL IDE project

Started by Jean-Michel POUREalmost 25 years ago2 messages
#1Jean-Michel POURE
jm.poure@freesurf.fr

Hello all,

I would like to inform you all that I am currently working on the
implementation of PL/pgSQL packages on both server-side (PostgreSQL 7.1)
and client-side (PgAdmin).
The idea is to add an PL/pgSQL Integrated Development Environment to
pgadmin. Help and suggestions needed. If someone is already working on a
similar project, let me know how I can help. For discussion, please
register on mailto:pgadmin-hackers@greatbridge.org mailing list. Help and
suggestions needed !

First of all, some useful resources:
http://www.oreilly.com/catalog/advoracle/chapter/ch02.html
http://postgresql.rmplc.co.uk/devel-corner/docs/programmer/plpgsql-porting.html

The basic idea behind the project is to store functions and packages in
PgAdmin tables and use drop/create mechanisms to load them in the database.
Here is a first analysis, do not blame in case it is imprecise:

1) Dependencies
The main problem when compiling a set of functions is dependencies :
- transitivity dependencies: if function B relies on function B, and
function A relies on function C, the compilation should be in A, B and C order.
- cross dependencies: if a function A relies on B, B relies on C and C
relies on A, compilation will not work. Warnings should be sent to the user.
According to http://www.oreilly.com/catalog/advoracle/chapter/ch02.html,
this problem exists in Oracle databases (!!!).

To avoid simple dependency problems, we need to work on isolating compiling
mechanisms.

This could be something like :
- functions with no sub calls are compiled first,
- functions with sub calls are compiled secondly, according to an automatic
dependency analysis,
- triggers are compiled at last,
- ultimately, users should be able to define compilation order.

There are maybe more simple mechanisms (???).
Does pg_dump isolate functions in a precise order (???).

2) Isolate Development / Production versions
For every single function, we should isolate the production version
(stable) from the development version (unstable).
This will help debugging and solve dependencies until the project is
'cleanly' compiled and debugged.
This can be done by renaming all functions with the 'unstable_' prefix
during compilation and the use of aliases.

Let's see the example with functionX :
-> functionX is an alias that calls :
stable_functionX (arg1, ...): stable version (production)
unstable_functionX (arg1, ...): unstable version (development)
serial1_functionX (arg1, ...), serial2_functionX (arg1, ...): archived
versions of functionX

Of course, this would be transparent for the developer which will only see
functionX in the IDE.
Switching from unstable_function to stable_function would only require to
recompile the aliases.

3) Serialize package releases
It should be possible to serialize packages and store/reload different
releases.
A logging table will provide a change log (with user names and description
of changes).
I do not intend to work on diffs and don't think it is possible.

4) Server-side logic
Most of the logic should be developed in PL/pgSQL.
On client-side, PgSchema (the new object structure of Pgadmin) will manage
the whole thing.

5) Syntax checking / indenting.
Has anyone heard of open-source objects handling code indenting and syntax
checking ?
I am not going to work on this, help needed.

6) Import / Export of packages
We need a simple mechanism to import/export packages.

7) Master/Slave PL/pgSQL Server
Code should be stored on a master server and distributed to slave servers
through simple mechanisms.
This last logic will be stored in PgSchema as I don't know how to do it
with PostgreSQL itself.
Any possibility to embed it in PostgreSQL (remote call ???).

Looking forward to hearing from you,
Greetings from Jean-Michel POURE, Paris

#2Dave Page
dpage@vale-housing.co.uk
In reply to: Jean-Michel POURE (#1)
RE: [pgAdmin-hackers] PL/pgSQL IDE project

-----Original Message-----
From: Jean-Michel POURE [mailto:jm.poure@freesurf.fr]
Sent: 07 April 2001 15:24
To: pgAdmin-hackers@greatbridge.org
Cc: pgsql-hackers@postgresql.org
Subject: [pgAdmin-hackers] PL/pgSQL IDE project

Hello all,

I would like to inform you all that I am currently working on the
implementation of PL/pgSQL packages on both server-side
(PostgreSQL 7.1)
and client-side (PgAdmin).
The idea is to add an PL/pgSQL Integrated Development Environment to
pgadmin. Help and suggestions needed. If someone is already
working on a
similar project, let me know how I can help. For discussion, please
register on mailto:pgadmin-hackers@greatbridge.org mailing
list. Help and
suggestions needed !

Hi Jean-Michel,

Sounds great. My only concern is that you consider the way different code
has already been implemented in pgAdmin eg:

1) Any server side objects (SSOs) such as tables, functions or views should
be prefixed 'pgadmin_'. There is a mechanism in place in basSQL.bas which
will autorepair/upgrade SSOs. In the case of upgrades there is an SSO
version number stored in basGlobal.bas. If this doesn't match the version
number in the pgadmin_param table then an upgrade will occur.

2) Use the same error handling that is already implemented elsewhere.

Where applicable, be sure to reuse existing code like the SQL Wizard - no
point in writing another one!

Good luck,

Regards, Dave.