so langs weiß ich echt nicht mehr weiter… ich hab zwei trigger die wenn der zweils ander deaktiviert ist, wunderbar laufen. wenn ich jedoch beide laufen lass bekomme ich net fehlermeldung:
InternalError: plpython: could not compile function “tab_func_all_managed_deps”
DETAIL: <type ‘exceptions.KeyError’>: ‘in_pom_id’
CONTEXT: SQL statement "SELECT groupid FROM tab_func_all_managed_deps( $1 ) WHERE groupid = $2 AND artifactid = $3 AND version = $4 "
PL/pgSQL function “trig_func_depmanagement_biu” line 36 at SQL statement
SQL statement “INSERT INTO dependencyManagement ( pom_id, dep_pom_id )VALUES ( $1 , $2 )”
PL/pgSQL function “udf_insert_dm_relationship” line 40 at SQL statement
die sache ist die das ich in der angebenen function (tab_func_all_managed_deps) garnix mit in_pom_id mache…
CREATE OR REPLACE FUNCTION tab_func_all_managed_deps(IN pom_id integer)
RETURNS SETOF type_dependency AS
$BODY$
response = []
#plpy.error('test tes---------------------------------? ')
profile_m = plpy.prepare('''SELECT
groupid,
artifactid,
version
FROM tab_func_profile_m_dependencies($1)''', ['INTEGER'])
profile_m_set = plpy.execute(profile_m, [pom_id])
if profile_m_set.nrows() > 0:
as_list = [(x['groupid'], x['artifactid'], x['version']) for x in profile_m_set]
response.extend(as_list)
m_deps =plpy.prepare('''SELECT
groupid,
artifactid,
version
FROM tab_func_m_dependencies($1)''', ['INTEGER'])
m_deps_set = plpy.execute(m_deps, [pom_id])
if m_deps_set.nrows() > 0:
as_list = [(x['groupid'], x['artifactid'], x['version']) for x in m_deps_set]
response.extend(as_list)
return response
$BODY$
LANGUAGE 'plpythonu'
Auch in den functions die von diesr aufgrufen werden, wird nix mit “in_pom_id” gemacht…
Ich hab echt keinen Plan was ich da jetzt noch machen kann…
Schnellschuß: kann es sein, daß pom_id sowohl der Name einer IN-Variablen als auch der Name einer Tabellenspalte ist? Zumindest in pl/pgsql fällt man mit sowas recht zuverlassig auf die Nase.
Aber, wie gesagt, das ist nur ein Schnellschuß aus der Hüfte…
naja also es gibt die spalte pom_id, und die auch gleich in zwei tabellen, aber eigentlich nicht in_pom_id… aber ich versuche mal alle inparameternamen zu ändern…
ok, nach langem suchen hab ich den fehler gefunden, auch wenn ich nicht ganz verstehe was ich genau falsch gemacht habe.
also ich hatten ne PL/Python function die sich selbst aufgerufen hat, sprich recursiv, und genau das wahr wohl der fehler.
Die “lösung” sieht hat jetzt so aus, das ich einfach nur eine methode in der PL/Python function definiert habe die sich dann selbst aufruft (anstatt die ganz DB function) wird. naja und jetzt läufts ohne problem.
Also wenn einer mir sagen könnte was da falsch gelaufen ist, oder ob es immer eine schlecht idee ist ein recursive schleife zu verwenden, wäre ich mehr als dankbar. So und jetzt trinke ich erstmla nen bier
Rekursion hat immer die latente Gefahr, endlos tief zu gehen. Per se ist Rekursion also nicht schlecht, nur riskant. Im Zuge von CTE wird man sich wohl mehr mit Rekusion beschäftigen müssen, interessant ist das allemal, guggst Du <2f4958ff0810080653s52629bf1tac54255ae5d4ed7d@mail.gmail.com> von heute in [GENERAL] PI using WITH RECURSIVE .
@ads: CTE wäre ein schönes Bonus-Kapitel für Dein geplantes Projekt.
ok, das mit CTE is ne feine sache, hab zwar keine ahnung wie ich diesen CVS HEAD bekomme, aber tante gooogle wird mit da bestimmt helfen können. Für heute bleibe ich aber beim bier.