Ganz was komischens, zwei Trigger die sich nicht leiden können

Hallo alle zusammen,

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…


Andreas

Hallo,

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 :smiley:

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 :slight_smile: .

@ads: CTE wäre ein schönes Bonus-Kapitel für Dein geplantes Projekt.

Andreas

hallo,

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.

Schönen abend noch

Todo hinzugefügt, Danke.

einfach mal abwarten - bis pg mal wieder zum fortschrittlichsten aller dbms wird :slight_smile:

Wie wäre es, wenn Du bis dahin aufhörst zu nerven?

Andreas

wenn du ein wenig an deiner wahrnehmung arbeitest …

mach doch nicht deine umwelt fuer deine ungemuetliche stimmung verantwortlich :slight_smile:

naja - ich denke aus dir wird kein zen-meischder mehr