PL/R has support for auto-loading R code during interpreter initialization. It uses a special table, plr_modules, which is presumed to contain modules of R code. If this table exists, the modules defined are fetched from the table and loaded into the R interpreter immediately after creation.
The definition of the table plr_modules is as follows:
CREATE TABLE plr_modules (
modseq int4,
modsrc text
);
The field modseq is used to control the order of installation. The field modsrc contains the full text of the R code to be executed, including assignment if that is desired. Consider, for example, the following statement:
INSERT INTO plr_modules
VALUES (0, 'pg.test.module.load <-function(msg) {print(msg)}');
This statement will cause an R function named pg.test.module.load to be created in the R interpreter on initialization. A PL/R function may now simply reference the function directly as follows:
create or replace function pg_test_module_load(text) returns text as '
pg.test.module.load(arg1)
' language 'plr';
select pg_test_module_load('hello world');
pg_test_module_load
---------------------
hello world
(1 row)
The table plr_modules must be readable by all, but it is wise to make it owned and writable only by the database administrator.