2017-05-15 1 views
0

Je souhaite enregistrer des règles dynamiques dans une table postgres.Postgres dynamic evaluation

Par exemple:

  • J'ai une table: Tstudents, avec les colonnes suivantes: Cid:serial Cname:varchar, Cmajor:varchar, CGPAGrades:float, Ccreditscompleted:integer, CthesisScore.
  • J'ai aussi une table pour Trules, avec les colonnes suivantes: Cmajor:Varchar, CSomeRules:Varchar.

Si un étudiant est majeur dans ingénierie Je les règles suivantes seront évaluées CSomeRules qui va probablement dire: creditcompleted>40, CGPAGrades>3.5, thesisScore>8

  1. Nous enregistrons les règles dans une table Trules
  2. les règles est dynamique dans le sens où creditcompleted>40, CGPAGrades>3.5, thesisScore>8 peut devenir le suivant sur le prochain semestre: creditcompleted>40, CGPAGrades>3.5 nous avons laissé tomber une de l'exigence. Ou creditcompleted * CGPAGrades > somevalue

  3. Les règles peuvent changer souvent, c'est pourquoi si possible d'enregistrer les règles sur une table, rien ne doit être codé en dur. Peut-être que ce dont j'ai besoin est quelque chose de similaire à javascript eval concept.

Comment faire cela dans postgres?

Répondre

0

Vous composez une instruction SQL à l'aide de vos règles et exécutez-la sur la base de données.

Vous pouvez le faire dans le code client ou dans une fonction PL/pgSQL en utilisant EXECUTE 'command string'.

Assurez-vous de pouvoir faire confiance à la source d'où proviennent les règles, car vous risquez des attaques par injection SQL si vous construisez dynamiquement des instructions SQL à partir de l'entrée de l'utilisateur.