Re: Support for CREATE MODULE?

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: Jim Mlodgenski <jimmy76(at)gmail(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Support for CREATE MODULE?
Date: 2021-06-04 20:09:26
Message-ID: CAFj8pRCwacB5UFfZWrQi5K=kbb=T-urjCUSk1GPZQM8J0iQ1Ug@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi

st 2. 6. 2021 v 15:39 odesílatel Jim Mlodgenski <jimmy76(at)gmail(dot)com> napsal:

> Working with users over the years, some have large libraries of server
> side code sometimes consisting of 100k+ lines of code over 1000+ functions
> and procedures. This usually comes from a migration of a commercial
> database like Oracle where it was best practice to put all of your
> business logic into stored procedures. In these types of apps, just
> managing the code is a challenge. To help classify objects, schemas
> are used, but you are at the mercy of a naming convention to show
> association. For example, a frequent naming convention would be having
> related schemas with the names of foo_bar and foo_baz. For devs, that's
> akin to keeping a file like xlog.c in a directory structure like
> backend_access_transam instead of backend/access/transam. IMHO, having
> a hierarchy makes it simpler to reason about related code bits.
>
> The SQL spec does have a concept of modules that help address this. It's
> defined as a persistent object within a schema that contains one or more
> routines. It also defines other things like local temporary tables and
> path specifications. There are other databases like DB2 that have
> implemented module support each with their own way of defining the
> routines within the module. The spec doesn't really give guidance on
> how to manipulate the objects within the module.
>
> Attached is a POC patch for modules. I modeled it as a sub-schema because
> that is more what it seems like to me. It adds additional columns to
> pg_namespace and allows for 3-part (or 4 with the database name) naming
> of objects within the module. This simple example works with the patch.
>
> CREATE SCHEMA foo;
> CREATE MODULE foo.bar
> CREATE FUNCTION hello() RETURNS text
> LANGUAGE sql
> RETURN 'hello'
> CREATE FUNCTION world() RETURNS text
> LANGUAGE sql
> RETURN 'world';
> SELECT foo.bar.hello();
>
> Questions
> - Do we want to add module support?
>
> - If we do, should it be implemented as a type of namespace or should it
> be its own object type that lives in something like pg_module?
>
> - How should users interact with objects within a module? They could be
> mostly independent like the current POC or we can introduce a path like
> ALTER MODULE foo ADD FUNCTION blah
>

I never liked the SQL/PSM concept of modules. The possibility to assign
database objects to schema or to modules looks like schizophrenia.

There are only two advantages of modules - a) possibility to define private
objects, b) local scope - the objects from modules shadows external objects
without dependency of search_path.

But both these features are pretty hard to implement in PL/pgSQL - where
expression executor is SQL executor.

Without these features I don't see strong benefits for modules.

Regards

Pavel

>
> --Jim
>

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message David Christensen 2021-06-04 20:24:31 Re: DELETE CASCADE
Previous Message Peter Eisentraut 2021-06-04 20:08:04 Re: Are we missing (void) when return value of fsm_set_and_search is ignored?