Ergebnis 1 bis 10 von 10

Thema: bytea: Cacheproblem(?)

  1. #1
    Hannes23 ist offline Benutzer
    Registriert seit
    07.05.2010
    Beiträge
    40

    Standard bytea: Cacheproblem(?)

    Hallo zusammen,

    ich speichere über folgenden Weg ein PDF Dokument als 'bytea' in einer Postgres-Datenbank (Python Script):

    Code:
    with open (mypdf,"rb") as f:
        filedata = f.read()
        filedata=filedata.encode("base64")
        
        
    curs.execute("""UPDATE public.test SET document=%(bytea)s;""",{'bytea' : psycopg2.Binary(filedata)})
    conn.commit()
    An anderer Stelle wird das PDF dann auf gleichem Weg wieder aus der Datenbank geladen und kann vom Benutzer betrachtet werden. Alles wunderbar :-)

    Ein Problem bekomme ich nur, wenn ich das PDF durch ein anderes ersetzen möchte. In diesem Fall wird nämlich immnoch das alte PDF angezeigt.

    Kann es sein, dass Postgres hier auf irgendeine weise "cached"? Oder weiß sonst jemand, woran das liegen könnte?

    Vielen Dank für jeden Hinweis!

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Hannes23 Beitrag anzeigen
    Hallo zusammen,

    ich speichere über folgenden Weg ein PDF Dokument als 'bytea' in einer Postgres-Datenbank (Python Script):

    Code:
    with open (mypdf,"rb") as f:
        filedata = f.read()
        filedata=filedata.encode("base64")
        
        
    curs.execute("""UPDATE public.test SET document=%(bytea)s;""",{'bytea' : psycopg2.Binary(filedata)})
    conn.commit()
    An anderer Stelle wird das PDF dann auf gleichem Weg wieder aus der Datenbank geladen und kann vom Benutzer betrachtet werden. Alles wunderbar :-)

    Ein Problem bekomme ich nur, wenn ich das PDF durch ein anderes ersetzen möchte. In diesem Fall wird nämlich immnoch das alte PDF angezeigt.

    Kann es sein, dass Postgres hier auf irgendeine weise "cached"? Oder weiß sonst jemand, woran das liegen könnte?

    Vielen Dank für jeden Hinweis!
    Ähm, Du machst ein Update ohne WHERE-Condition?

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    Hannes23 ist offline Benutzer
    Registriert seit
    07.05.2010
    Beiträge
    40

    Standard

    Nein, entschuldige - es ist natürlich ein WHERE dabei, hab es nur in dem Beispiel weggelassen. Was aber wohl nicht so klug war :-)

  4. #4
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    525

    Standard

    Zitat Zitat von Hannes23 Beitrag anzeigen
    Ein Problem bekomme ich nur, wenn ich das PDF durch ein anderes ersetzen möchte. In diesem Fall wird nämlich immnoch das alte PDF angezeigt.

    Kann es sein, dass Postgres hier auf irgendeine weise "cached"? Oder weiß sonst jemand, woran das liegen könnte?
    Ich denke nicht, dass Postgres "alte" Werte zurückliefert solange Du die Änderung sauber committest.

    Ich würde folgendes prüfen:
    - Wird das Update wirklich korrekt committed?
    - Greift die Anwendung auf eine lokale Kopie zu die z.B. im Dateisystem zwischengespeichert wurde
    - Ich kenne Python nicht. Liegt da evtl. noch ein ORM dazwischen welches ein Caching macht?
    A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

  5. #5
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Eine andere - davon unabhängige Frage: Wieso verwendest du ByteA, wenn du sowieso die Daten als Base64 kodierst?
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  6. #6
    Hannes23 ist offline Benutzer
    Registriert seit
    07.05.2010
    Beiträge
    40

    Standard

    Hallo zusammen,

    entschuldigt, dass ich das Thema nach so langer Pause wieder aufgreifen muss, aber ich bin nicht früher dazu gekommen.

    @ads:
    Gäbe es denn eine bessere Möglichkeit? Ich kann nur leider das Datenfeld nicht mehr ändern, weil die DB schon seit Jahren produktiv im Einsatz ist und ich es mir dann wohl mit den bestehenden Datensätzen verscherzen würde.
    Zu Deiner Frage, ob das Update richtig durchgeführt wird: Ich habe mal per diff den bytecode verglichen, der im bytea-Feld steht. Der ist immernoch der selbe (obwohl ich das Feld vor dem Update auch mal per "SET mypdf = null" geleert habe).

    @castorp:
    Was meinst Du denn mit einem "ORM"?
    Nein, auf eine lokale Kopie sollte es nicht zugreifen. Wenn ich mir das neue PDF anschaue, dann ist das schon mit neuem Inhalt gefüllt.

    Habt ihr noch eine Idee, was hier los sein könnte?

    Vielen Dank!

  7. #7
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    794

    Standard

    ORM = Objektrelationales Modell, sowas wie z.B. SQLAlchemy in Python. Das würde zwischen psycopg2 und deinen Klassen sitzen und generiert die Datenbankanfragen und Transaktionen. Wird auch Persistenzlayer genannt. Recht empfehlenswert und gut, wenn es das Projekt erlaubt.

    Ansonsten könnte ich mir das morgen mal anschauen, im Moment muß ich grillen

    Gruß Uwe

    Gruß Uwe
    Have a lot of fun!

  8. #8
    Hannes23 ist offline Benutzer
    Registriert seit
    07.05.2010
    Beiträge
    40

    Standard

    Hallo Uwe,

    na vom Grillen möchte ich dich natürlich nicht abhalten - wer weiß wie oft das noch geht diesen Sommer :-)

    Danke für die Erklärung. Aber ein ORM benutze ich - soweit ich weiß - nicht. Ich wär Dir also sehr verbunden wenn Du bei einem Nicht-Grillwetter einen nochmal einen Blick darauf werfen könntest

    Viele Grüße, Hannes

  9. #9
    Hannes23 ist offline Benutzer
    Registriert seit
    07.05.2010
    Beiträge
    40

    Standard

    Hallo zusammen,

    so, Problem endlich gelöst :-) Es hatte letztlich aber nichts mit Postgres zu tun, sondern mit einer Software, die das gespeicherte PDF (bytea) dann aus der Datenbank aufgerufen hat. Sie hat schoneinmal geöffnete PDFs in einem temporären Verzeichnis gespeichert und auch nach einer Änderung trotzdem das alte PDF geladen. Ich hätte das früher merken müssen, wenn ich einfach die Bitfolge im bytea-Feld der DB geprüft hätte. Also: Sorry an euch - war viel Lärm um Nichts :-)

    Trotzdem vielen Dank an alle, die versucht haben, mir bei diesem Problem zu helfen!

    Viele Grüße, Hannes

  10. #10
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Dann würde ich sagen, das wir uns als Entschädigung nächste Woche in Oberhausen sehen ;-)
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

Ähnliche Themen

  1. Problem Problem bei INSERT bytea
    Von Hannes23 im Forum Programmierung
    Antworten: 3
    Letzter Beitrag: 11.03.2011, 09:09
  2. bytea Migration von 8.4 nach 9.0
    Von rolf.schaufelberger im Forum Migration
    Antworten: 1
    Letzter Beitrag: 11.01.2011, 18:26
  3. max size bytea
    Von acki4711 im Forum Allgemeines
    Antworten: 1
    Letzter Beitrag: 25.04.2008, 08:05
  4. bytea Probleme
    Von VinoRosso im Forum Programmierung
    Antworten: 7
    Letzter Beitrag: 18.03.2008, 18:37
  5. pg_dump - bytea - Problem
    Von szk im Forum Allgemeines
    Antworten: 2
    Letzter Beitrag: 11.12.2006, 19:13

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum