<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>postgresql - gezieltes löschen</title>
    <link>http://forum.geizhals.at/feed.jsp?id=895008</link>
    <description>Geizhals-Forum</description>
    <item>
      <title>Re: postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7907283.html#7907283</link>
      <description>&lt;blockquote&gt;&lt;em&gt; Was wäre eine performante Variante?&lt;br&gt;&lt;/em&gt;&lt;/blockquote&gt; &lt;br&gt;&lt;br&gt;Falls es wirklich ein paar Milliarden Records sind.&lt;br&gt;&lt;br&gt;Man entlädt das ganze Zeugs, erstellt sich eine Löschliste (einfachste Gruppenwechsellogik) und schmeißt die Delete Statements dann portionsweise die entsprechenden Delete Statements rein, ohne dass der Betrieb beeinflusst ist bzw. in einer ruhigeren Zeit.&lt;br&gt;&lt;br&gt;Elegantere aber aufwändigere Methode. Setz einen Trigger, spiel jedes Duplikat auf eine Archivtable und auf die fahrst regelmäßig ein Truncate.&lt;br&gt;&lt;br&gt;pong&lt;br/&gt;</description>
      <pubDate>Mon, 28 May 2018 17:33:24 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7907283.html#7907283</guid>
      <dc:creator>pong</dc:creator>
      <dc:date>2018-05-28T17:33:24Z</dc:date>
    </item>
    <item>
      <title>Re(7): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905721.html#7905721</link>
      <description>Das hab ich eigentlich nicht behauptet. Mein Vorschlag bezog sich eher als Verbesserung (aus meiner Sicht) zu den obigen Vorschlägen mit den Temptables.&lt;br&gt;&lt;br&gt;Deinen Einwand finde ich aber natürlich berechtigt. Wenn sich eine Problemstellung mit einem SQL-Befehl erschlagen lässt, dann wäre es auf jeden Fall ein sehr guter Kandidat. Ich selbst habe zwar keine besonders guten Erfahrungen mit Not-Operatoren bei großen Datenmengen und versuche diese möglichst zu vermeiden, aber letztendlich muss man eh anhand der konkreten Datenbank (bzw. Testkopie) ein paar Varianten selbst ausprobieren bzw. abwägen, wie problematisch etwaige höhere Laufzeiten da sind. &lt;br&gt;&lt;br&gt;Treffendes Zitat in dem Zusammenhang:&lt;br&gt;&lt;blockquote&gt;&lt;em&gt;There is like a bazillion articles on the internet about NOT IN vs NOT EXISTS vs LEFT OUTER JOIN vs OUTER APPLY and so on.&lt;/em&gt;&lt;/blockquote&gt;&lt;br/&gt;</description>
      <pubDate>Sat, 19 May 2018 07:29:39 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905721.html#7905721</guid>
      <dc:creator>Thing</dc:creator>
      <dc:date>2018-05-19T07:29:39Z</dc:date>
    </item>
    <item>
      <title>Re(6): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905706.html#7905706</link>
      <description>Warum ist das performanter oder besser als die überflüssigen Records gleich zu löschen (mit WHERE NOT EXISTS o.ä.)?&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 19:33:52 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905706.html#7905706</guid>
      <dc:creator>mko</dc:creator>
      <dc:date>2018-05-18T19:33:52Z</dc:date>
    </item>
    <item>
      <title>Re(6): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905702.html#7905702</link>
      <description>Das mit dem trigger wär keine gute idee, da ich&lt;br&gt;a) sehr viel öfter inserte, als ich deleten muss (es reicht wenn ich die table alle x tage mal zamräum)&lt;br&gt;und&lt;br&gt;b) bei postgresql ein after insert trigger auch feuert wenn die on conflict do nothing clause schlagend wird&lt;br&gt;&lt;br&gt;In Kombination würd mir das die performance ruinieren&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 17:26:08 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905702.html#7905702</guid>
      <dc:creator>zeddicus</dc:creator>
      <dc:date>2018-05-18T17:26:08Z</dc:date>
    </item>
    <item>
      <title>Re(6): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905701.html#7905701</link>
      <description>das hört sich eigentlich wirklich nach einer guten idee an, ich glaub das könnts werden&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 17:22:08 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905701.html#7905701</guid>
      <dc:creator>zeddicus</dc:creator>
      <dc:date>2018-05-18T17:22:08Z</dc:date>
    </item>
    <item>
      <title>Re(5): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905700.html#7905700</link>
      <description>&lt;blockquote&gt;&lt;em&gt;Momentan tendier ich dazu, mir die relevanten “letzt”records vor dem zeitlimit per distinct on über group by zu holen (ein nettes feature von postgresql), in eine temptbl zu schreiben &lt;br&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;br&gt;Vielleicht kannst du statt der temptbl bei der Originaltabelle ein fixes Feld "colRescue" anfügen. Beim Aufräumprozess kann du dann jeweils mittels deinem GroupBy-Befehl kombiniert mit einem Update das ColRescue-Feld befüllen, sodass es "J" bei den Datensätzen enthält, die zu retten sind (also die relevanten letztrecords). Im zweiten Schritt löscht du dann alle Datensätze die vor dem Zeitlimit liegen und das ColRescue-Feld nicht auf "J" haben. Im dritten Schritt löscht du dann bei den geretteten Datensätzen das "J", damit für den nächsten Lauf wieder alles sauber ist.&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 17:11:21 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905700.html#7905700</guid>
      <dc:creator>Thing</dc:creator>
      <dc:date>2018-05-18T17:11:21Z</dc:date>
    </item>
    <item>
      <title>Re(5): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905699.html#7905699</link>
      <description>Wenn Du mit temptable arbeitest kannst den PK (und unique index drauf) mitschreiben und dann mit exists (subselect) arbeiten. das ist eine der schnellsten zugriffe, da 1.) nur pk abgefragt wird und 2.) nach dem ersten auftauchen nicht mehr selektiert wird.&lt;br&gt;&lt;br&gt;Die somit bereinigte Tabelle dann mit einem before-insert-trigger versehen, der die alten Daten rausschmeisst, bevor der neue record geschrieben wird.&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 17:03:00 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905699.html#7905699</guid>
      <dc:creator>chaka</dc:creator>
      <dc:date>2018-05-18T17:03:00Z</dc:date>
    </item>
    <item>
      <title>Re(4): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905698.html#7905698</link>
      <description>Sind sowohl PKs als auch FKs vorhanden, und angesichts der Größe ist das leider kein gangbarer Weg. &lt;br&gt;&lt;br&gt;Momentan tendier ich dazu, mir die relevanten “letzt”records vor dem zeitlimit per distinct on über group by zu holen (ein nettes feature von postgresql), in eine temptbl zu schreiben und diese dann per cursor durchsteppen (oder halt per function call im select) und die entsprechend vorhergehenden aus der tabelle zu löschen. Oder über einen join, wobei die transaction dann zu gross und blockierend wird.&lt;br&gt;Werd genanntes dieses Wochenende mal ausschreiben und testen. Mal schaun &lt;img src="zwinker.gif" width="16" height="19" align="absmiddle" alt=";)"/&gt;&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 16:09:00 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905698.html#7905698</guid>
      <dc:creator>zeddicus</dc:creator>
      <dc:date>2018-05-18T16:09:00Z</dc:date>
    </item>
    <item>
      <title>Re(4): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905697.html#7905697</link>
      <description>Sind sowohl PKs als auch FKs vorhanden, und angesichts der Größe ist das leider kein gangbarer Weg. &lt;br&gt;&lt;br&gt;Momentan tendier ich dazu, mir die relevanten “letzt”records vor dem zeitlimit per distinct on über group by zu holen (ein nettes feature von postgresql), in eine temptbl zu schreiben und diese dann entweder per cursor durchsteppen und die entsprechend vorhergehenden aus der tabelle zu löschen. Oder über einen join, wobei die transaction dann zu gross und blockierend wird.&lt;br&gt;Werd genanntes dieses Wochenende mal ausschreiben und testen. Mal schaun &lt;img src="zwinker.gif" width="16" height="19" align="absmiddle" alt=";)"/&gt;&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 16:09:00 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905697.html#7905697</guid>
      <dc:creator>zeddicus</dc:creator>
      <dc:date>2018-05-18T16:09:00Z</dc:date>
    </item>
    <item>
      <title>Re(3): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905696.html#7905696</link>
      <description>Dann würde ich es step-by-step mittels temp tables bauen und den Rest dann rausschmeissen.&lt;br&gt;&lt;br&gt;Ich kenn leider nicht die Indizierung der Tabelle, ob PK oder FK's vorhanden sind.&lt;br&gt;&lt;br&gt;Ist es stand-alone bau dir eine table, in die du die relevanten Daten fütterst, dann drop die große und rename die neue.&lt;br&gt;&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 15:42:56 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905696.html#7905696</guid>
      <dc:creator>chaka</dc:creator>
      <dc:date>2018-05-18T15:42:56Z</dc:date>
    </item>
    <item>
      <title>Re(3): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905676.html#7905676</link>
      <description>Alles klar.&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 11:12:44 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905676.html#7905676</guid>
      <dc:creator>mko</dc:creator>
      <dc:date>2018-05-18T11:12:44Z</dc:date>
    </item>
    <item>
      <title>Re(2): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905675.html#7905675</link>
      <description>Ich sag mal so, es ist eine table mit mehreren Milliarden records, in die im Produktivmodus pro Sekunde auch ein paar hundert reinwandern. Wenn jetzt irgendwas längere table locks verursachen würde, müsst ich dafür in den Maintenance Modus, und das ausführen. &lt;br&gt;&lt;br&gt;Wär prinzipiell kein Problem, dann muss ich das Frontend halt für ein Wartungsfenster offline nehmen. Da das aber regelmäßig durchzuführen ist, möchte ich den Aufwand bezüglich manueller Eingriffe (also das offline / online schalten, etc) möglichst gering halten. Dass ich die Indizes danach überarbeiten muss ist auch klar.&lt;br&gt;&lt;br&gt;Wenn das generell nicht schnell ist, aber dafür nur sehr granulare locks setzt, ist das natürlich kein Problem, dann kann das ja im laufenden Betrieb nebenher laufen, und ich muss nur regelmäßig dann die Reindizierung planen.&lt;br&gt;&lt;br&gt;Also performancerelevant ist so gemeint:&lt;br&gt;Entweder exklusiv und dann möglichst schnell, oder, und das bevorzugt, möglichst ohne Nebenwirkungen, dann kanns auch länger dauern.&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 10:49:04 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905675.html#7905675</guid>
      <dc:creator>zeddicus</dc:creator>
      <dc:date>2018-05-18T10:49:04Z</dc:date>
    </item>
    <item>
      <title>Re: postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905669.html#7905669</link>
      <description>Hi!&lt;br&gt;&lt;br&gt;Ich würde mir in eine Temptable alle DS reinselektieren, die vor dem Vorhaltezeitraum sind, dann dort die letzten DS jeder Gruppe rauslöschen und über einen join alle in der temptable übriggebliebenen DS in der ursprünglichen Table rauslöschen. Die Temptable wird bei Beendigung der Session dann automatisch gelöscht.&lt;br&gt;&lt;br&gt;lg. mb&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 09:41:31 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905669.html#7905669</guid>
      <dc:creator>matchbox</dc:creator>
      <dc:date>2018-05-18T09:41:31Z</dc:date>
    </item>
    <item>
      <title>Re: postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905662.html#7905662</link>
      <description>Warum ist das performancerelevant? Wenn das beispielsweise einmal pro Tag läuft ist das ja nicht so wichtig.&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 09:19:14 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905662.html#7905662</guid>
      <dc:creator>mko</dc:creator>
      <dc:date>2018-05-18T09:19:14Z</dc:date>
    </item>
    <item>
      <title>Re(3): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905651.html#7905651</link>
      <description>&lt;blockquote&gt;&lt;em&gt; Das wäre von der Durchführung prinzipiell kein Problem, allerdings&lt;br&gt;performancetechnisch vermutlich nicht der burner &lt;br&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;br&gt;Da das Problem ja vollkommen sequentiell ist und daher O(N), würde ich es in 10 Minuten runtertippen und schauen, wie's performt. Prinzip "good enough".&lt;br&gt;&lt;br&gt;Mit jedem Auto-Join erzeugst du ja potentiell ein O(N²), wenn der Optimizer das nicht überreißt.&lt;br&gt;&lt;br&gt;&lt;blockquote&gt;&lt;em&gt; Generell ist es ja glaub ich ein recht alltägliches Problem, drum bin ich&lt;br&gt;guter Dinge, dass ich entweder hier oder im Netz eine gute Variante find. Bin&lt;br&gt;nur noch net wirklich zum Suchen gekommen&lt;br&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;br&gt;Den kenn ich! Ich habe mal in einer Firma mit wirklichen SQL Gurus gearbeitet. Das ist das Prinzip "Hoffnung".&lt;br&gt;&lt;br&gt;SQL Statements unter 2 Seiten waren dort nur zum Aufwärmen der neuen Mitarbeiter gedacht.&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 08:40:56 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905651.html#7905651</guid>
      <dc:creator>Paulas_Papa</dc:creator>
      <dc:date>2018-05-18T08:40:56Z</dc:date>
    </item>
    <item>
      <title>Re(2): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905644.html#7905644</link>
      <description>&lt;blockquote&gt;&lt;em&gt; Ich habe solche Dinge normalerweise über einen Cursor und klassische&lt;br&gt;imperative Programmierung gelöst.&lt;br&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;br&gt;Das wäre von der Durchführung prinzipiell kein Problem, allerdings performancetechnisch vermutlich nicht der burner &lt;img src="zwinker.gif" width="16" height="19" align="absmiddle" alt=";)"/&gt;&lt;br&gt;&lt;br&gt;Ich könnt mir prinzipiell vorstellen dass sich da ev. was über die Window Funktionen machen läßt über eine Art "having lead" bzw. where exists lead, , da ich aber damit noch nicht gearbeitet hab, hoff ich mal auf wen der da bewandert ist.&lt;br&gt;&lt;br&gt;Generell ist es ja glaub ich ein recht alltägliches Problem, drum bin ich guter Dinge, dass ich entweder hier oder im Netz eine gute Variante find. Bin nur noch net wirklich zum Suchen gekommen&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 08:25:18 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905644.html#7905644</guid>
      <dc:creator>zeddicus</dc:creator>
      <dc:date>2018-05-18T08:25:18Z</dc:date>
    </item>
    <item>
      <title>Re: postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905639.html#7905639</link>
      <description>Genau für solche Problemstellungen ist SQL das denkbar schlechteste Werkzeug. &lt;br&gt;&lt;br&gt;Ich kenne aber POSTGRES nicht. Vielleicht ist dessen Optimizer ja genial.&lt;br&gt;&lt;br&gt;Ich habe solche Dinge normalerweise über einen Cursor und klassische imperative Programmierung gelöst.&lt;br&gt;&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 07:48:08 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905639.html#7905639</guid>
      <dc:creator>Paulas_Papa</dc:creator>
      <dc:date>2018-05-18T07:48:08Z</dc:date>
    </item>
    <item>
      <title>Re(2): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905637.html#7905637</link>
      <description>Table partitioning hilft mir da imho eigentlich nix, da &lt;br&gt;&lt;br&gt;a) das Zeitfenster ja rollend ist&lt;br&gt;und&lt;br&gt;b) generell die Vorgabe 1 record pro group vor dem Zeitlimit zu behalten für eine partition denkbar ungeeignet ist&lt;br&gt;&lt;br&gt;oder seh ich da was falsch?&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 07:36:21 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905637.html#7905637</guid>
      <dc:creator>zeddicus</dc:creator>
      <dc:date>2018-05-18T07:36:21Z</dc:date>
    </item>
    <item>
      <title>Re(2): postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905638.html#7905638</link>
      <description>Table partitioning hilft mir da imho eigentlich nix, da &lt;br&gt;&lt;br&gt;a) das Zeitfenster ja rollend ist&lt;br&gt;und&lt;br&gt;b) generell die Vorgabe 1 record pro group vor dem Zeitlimit zu behalten für eine partition denkbar ungeeignet ist&lt;br&gt;&lt;br&gt;oder seh ich da was falsch?&lt;br&gt;&lt;br&gt;Nochmal:&lt;br&gt;Ich möchte nicht einfach alles vor Zeitpunkt x löschen. Das wär denkbar einfach. Ich muss pro Gruppe den letzten Record vor x behalten. Der kann 5 Monate oder 3 Sekunden vor x reingekommen sein.&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 07:36:21 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905638.html#7905638</guid>
      <dc:creator>zeddicus</dc:creator>
      <dc:date>2018-05-18T07:36:21Z</dc:date>
    </item>
    <item>
      <title>Re: postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905636.html#7905636</link>
      <description>Schau dir einmal TABLE PARTITIONING an.&lt;br&gt;&lt;br&gt;Von da aus kannst weiterarbeiten, z.B. mit temp-table, drop table, rename table&lt;br/&gt;</description>
      <pubDate>Fri, 18 May 2018 07:29:41 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905636.html#7905636</guid>
      <dc:creator>chaka</dc:creator>
      <dc:date>2018-05-18T07:29:41Z</dc:date>
    </item>
    <item>
      <title>postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905596.html#7905596</link>
      <description>Servus,&lt;br&gt;&lt;br&gt;folgende Voraussetzung:&lt;br&gt;&lt;br&gt;extrem große Tabelle tab1&lt;br&gt;&lt;br&gt;sagen wir mal als columns hätten wir&lt;br&gt;colTimestamp | colUserName | colValueName | colValue&lt;br&gt;&lt;br&gt;&lt;br&gt;jeder Record wird erst durch den zeitlich vorhergehenden Record des selben ValueNames des selben UserNames aussagekräftig, sprich es interessiert mich an und für sich die Änderung von colValue. Soweit kein Problem. Die Daten kommen in völlig unregelmäßigen unverhersehbaren Abständen.&lt;br&gt;&lt;br&gt;Jetzt möchte ich, um das Wachsen der DB zu beschränken, den Vorhaltezeitraum auf ein Jahr beschränken. Dazu brauch ich allerdings dann immer auch den letzten Record vor dem Zeitlimit.&lt;br&gt;&lt;br&gt;Generell gibt es etliche Möglichkeiten, das zu machen, allerdings spielt hier die Performance eine Rolle.&lt;br&gt;&lt;br&gt;um alle Klarheiten zu beseitigen, eine Beschreibung was ich erreichen will in pseudocode&lt;br&gt;&lt;br&gt;for each userName&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; for each valueName&lt;br&gt;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete where colUserName = userName and colValueName = valueName and colTimeStamp &amp;lt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(select first timestamp where colUserName = userName and colValueName = valueName and &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timestamp &lt; limit order by timestamp desc)&lt;br&gt;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Was wäre eine performante Variante? ein subquery ja wohl nicht&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Thu, 17 May 2018 20:23:49 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905596.html#7905596</guid>
      <dc:creator>zeddicus</dc:creator>
      <dc:date>2018-05-17T20:23:49Z</dc:date>
    </item>
    <item>
      <title>postgresql - gezieltes löschen</title>
      <link>http://forum.geizhals.at/t895008,7905599.html#7905599</link>
      <description>Servus,&lt;br&gt;&lt;br&gt;eigentlich geht's eher um das gezielte Übriglassen &lt;img src="zwinker.gif" width="16" height="19" align="absmiddle" alt=";)"/&gt;&lt;br&gt;&lt;br&gt;folgende Voraussetzung:&lt;br&gt;&lt;br&gt;extrem große Tabelle tab1&lt;br&gt;&lt;br&gt;sagen wir mal als columns hätten wir&lt;br&gt;colTimestamp | colUserName | colValueName | colValue&lt;br&gt;&lt;br&gt;&lt;br&gt;jeder Record wird erst durch den zeitlich vorhergehenden Record des selben ValueNames des selben UserNames aussagekräftig, sprich es interessiert mich an und für sich die Änderung von colValue. Soweit kein Problem. Die Daten kommen in völlig unregelmäßigen unverhersehbaren Abständen.&lt;br&gt;&lt;br&gt;Jetzt möchte ich, um das Wachsen der DB zu beschränken, den Vorhaltezeitraum auf ein Jahr beschränken. Dazu brauch ich allerdings dann immer auch den letzten Record vor dem Zeitlimit.&lt;br&gt;&lt;br&gt;Generell gibt es etliche Möglichkeiten, das zu machen, allerdings spielt hier die Performance eine Rolle.&lt;br&gt;&lt;br&gt;um alle Klarheiten zu beseitigen, eine Beschreibung was ich erreichen will in pseudocode&lt;br&gt;&lt;br&gt;for each userName&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; for each valueName&lt;br&gt;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete where colUserName = userName and colValueName = valueName and colTimeStamp &amp;lt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(select first timestamp where colUserName = userName and colValueName = valueName and &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timestamp &lt; limit order by timestamp desc)&lt;br&gt;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Was wäre eine performante Variante? ein subquery ja wohl nicht&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Thu, 17 May 2018 20:23:49 GMT</pubDate>
      <guid>http://forum.geizhals.at/t895008,7905599.html#7905599</guid>
      <dc:creator>zeddicus</dc:creator>
      <dc:date>2018-05-17T20:23:49Z</dc:date>
    </item>
  </channel>
</rss>
