DO $do$ declare isedb bool; createstmt text; begin isedb = (SELECT version() LIKE '%EnterpriseDB%'); createstmt := $create_stmt$ CREATE OR REPLACE FUNCTION pldbg_get_target_info(signature text, targetType "char") returns targetinfo AS $$ SELECT p.oid AS target, pronamespace AS schema, pronargs::int4 AS nargs, -- The returned argtypes column is of type oidvector, but unlike -- proargtypes, it's supposed to include OUT params. So we -- essentially have to return proallargtypes, converted to an -- oidvector. There is no oid[] -> oidvector cast, so we have to -- do it via text. CASE WHEN proallargtypes IS NOT NULL THEN translate(proallargtypes::text, ',{}', ' ')::oidvector ELSE proargtypes END AS argtypes, proname AS targetname, proargmodes AS argmodes, proargnames AS proargnames, prolang AS targetlang, quote_ident(nspname) || '.' || quote_ident(proname) AS fqname, proretset AS returnsset, prorettype AS returntype, $create_stmt$; -- Add the three EDB-columns to the query (as dummies if we're installing -- to PostgreSQL) IF isedb THEN createstmt := createstmt || $create_stmt$ p.protype='0' AS isfunc, CASE WHEN n.nspparent <> 0 THEN n.oid ELSE 0 END AS pkg, edb_get_func_defvals(p.oid) AS argdefvals $create_stmt$; ELSE createstmt := createstmt || $create_stmt$ 't'::bool AS isfunc, 0::oid AS pkg, NULL::text[] AS argdefvals $create_stmt$; END IF; -- End of conditional part createstmt := createstmt || $create_stmt$ FROM pg_proc p, pg_namespace n WHERE p.pronamespace = n.oid AND p.oid = $1::oid -- We used to support querying by function name or trigger name/oid as well, -- but that was never used in the client, so the support for that has been -- removed. The targeType argument remains as a legacy of that. You're -- expected to pass 'o' as target type, but it doesn't do anything. AND $2 = 'o' $$ LANGUAGE SQL; $create_stmt$; execute createstmt; -- Add a couple of EDB specific functions IF isedb THEN CREATE OR REPLACE FUNCTION edb_oid_debug(functionOID oid) RETURNS integer AS $$ select pldbg_oid_debug($1); $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION pldbg_get_pkg_cons(packageOID oid) RETURNS oid AS $$ select oid from pg_proc where pronamespace=$1 and proname='cons'; $$ LANGUAGE SQL; END IF; end; $do$;