Теперь я пытаюсь использовать JOOQ в новой версии программы, которая одновременно общается с двумя БД. Но проблема исходит из процедур Postgres, которые я не могу деактивировать из-за Routine generation cannot be deactivated
, даже если они мне не нужны в моей программе.
Проблема 1
Jooq понимает некоторые процедуры, такие как таблицы. Я не профессионал с SQL, поэтому я не знаю, почему это происходит, возможно, причина типа возврата процедуры? Код для генерации одной из процедур, в которых есть эта «ошибка»:
CREATE OR REPLACE FUNCTION dblink_get_notify(IN conname text, OUT notify_name text, OUT be_pid integer, OUT extra text)
RETURNS SETOF record AS
'$libdir/dblink', 'dblink_get_notify'
LANGUAGE c VOLATILE STRICT
COST 1
ROWS 1000;
ALTER FUNCTION dblink_get_notify(text)
OWNER TO postgres;
Возможно, причина проблемы в том, что существует другая процедура с таким же именем, но без параметра IN:
CREATE OR REPLACE FUNCTION dblink_get_notify(OUT notify_name text, OUT be_pid integer, OUT extra text)
RETURNS SETOF record AS
'$libdir/dblink', 'dblink_get_notify'
LANGUAGE c VOLATILE STRICT
COST 1
ROWS 1000;
ALTER FUNCTION dblink_get_notify()
OWNER TO postgres;
Проблема 2
Некоторые сгенерированные из процедур классы имеют ошибки компиляции (в описанной выше процедуре тоже есть эта ошибка )
Приведу еще один пример:
CREATE OR REPLACE FUNCTION bt_page_stats(IN relname text, IN blkno integer, OUT blkno integer, OUT type "char", OUT live_items integer,
OUT dead_items integer, OUT avg_item_size integer, OUT page_size integer, OUT free_size integer, OUT btpo_prev integer,
OUT btpo_next integer, OUT btpo integer, OUT btpo_flags integer)
RETURNS record AS '$libdir/pageinspect', 'bt_page_stats'
LANGUAGE c VOLATILE STRICT
COST 1;
ALTER FUNCTION bt_page_stats(text, integer)
OWNER TO postgres;
JOOQ считает эту процедуру рутиной. Но сгенерированный код имеет дважды идентичное поле Parameter<Integer> BLKNO
. И что мне показалось странным, так это конструктор этого класса:
/**
* Create a new routine call instance
*/
public BtPageStats() {
super("bt_page_stats", Public.PUBLIC);
addInParameter(RELNAME);
addInOutParameter(BLKNO);
addInOutParameter(BLKNO);
addOutParameter(TYPE);
addOutParameter(LIVE_ITEMS);
addOutParameter(DEAD_ITEMS);
addOutParameter(AVG_ITEM_SIZE);
addOutParameter(PAGE_SIZE);
addOutParameter(FREE_SIZE);
addOutParameter(BTPO_PREV);
addOutParameter(BTPO_NEXT);
addOutParameter(BTPO);
addOutParameter(BTPO_FLAGS);
}
Посмотрите на двойной addOutParameter (BLKNO)!
Ух, думаю, это все. Надеюсь, вы поможете мне с этими проблемами :)