On met dans une transaction atomique le truncate/copy.
* Cela permet de s'assurer que la table contient bien des données en tout instant où elle le devrait (c'est-à-dire quand on ne la vide pas explicitement)
This commit is contained in:
parent
23c9df55eb
commit
d9bd6a621d
1 changed files with 8 additions and 3 deletions
|
@ -440,9 +440,14 @@ def main(curseur, ldap):
|
|||
# On crée un stream qui sera ensuite utilisé par PostgreSQL
|
||||
stream = cStringIO.StringIO("\n".join(["%s\t%s\t%s\t%s" % (key[0], key[1], value, CUR_DATE) for (key, value) in accounted.iteritems()]))
|
||||
|
||||
# On met à jour accounting.
|
||||
curseur.execute("TRUNCATE accounting;")
|
||||
curseur.copy_from(stream, "accounting")
|
||||
# On met à jour accounting, en utilisant une nouvelle
|
||||
# connexion, qui effectue le truncate/copy dans la même
|
||||
# transaction.
|
||||
conn = psycopg2.connect(database='filtrage', user='crans')
|
||||
curs = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
|
||||
curs.execute("TRUNCATE accounting;")
|
||||
curs.copy_from(stream, "accounting")
|
||||
conn.commit()
|
||||
|
||||
# Check and blacklist
|
||||
check_and_blacklist(accounted, curseur, ldap)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue