Re: Datensatz an vorbestimmter Stelle einfuegen.

From: Markus Winand <markus(dot)winand(at)winand(dot)at>
To: Thomas Markus <t(dot)markus(at)proventis(dot)net>
Cc: Guenther Boelter <gboelter(at)gmail(dot)com>, pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Datensatz an vorbestimmter Stelle einfuegen.
Date: 2014-02-04 07:59:29
Message-ID: 1EE30B27-3542-466E-8DB0-CF8B89ED970F@winand.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Hallo,

So war es natürlich auch nicht gemeint. Das ORDER BY ist natürlich Voraussetzung.

Wie es aussieht, zielte die ursprüngliche Frage darauf ab, wie man beim auslesen eine bestimmte Reihenfolge erhält — also auf ORDER BY. Durch die Formulierung der Frage habe ich mich (und auch andere) verleiten lassen.

Zusammenfassend würde ich nun so antworten:

Grundsätzlich hat es den Benutzer einer Datenbank nicht zu interessieren, wie die Daten gespeichert werden. Wenn man die Daten in einer gewissen Reihenfolge auslesen will, kann man sich mit ORDER BY einen Reihenfolge beim SELECT wünschen. Soweit SQL — hat alles noch nichts mit PostgreSQL zu tun.

Manchmal kann es aus Performance gründen sinnvoll sein, die Daten sehr wohl in einer bestimmten Reihenfolge abzuspeichern (weil sequenzielles lesen schneller geht). Dafür bietet PostgreSQL die Möglichkeit mit CLUSTER (muss regelmäßig gemacht werden) oder eben Indizes (B-Tree um genau zu sein).

Für letzteres gibt es Beispiele und Erklärungen auf meiner Seite: http://use-the-index-luke.com/de/sql/sortieren-gruppieren/indexed-order-by

mfg,

Markus Winand
markus(dot)winand(at)winand(dot)at
T +43 1 9444047

+++ Already registered for our next online training?
http://winand.at/services/sql-performance-training-online

Maderspergerstr. 1-3/9/11
1160 Wien
AUSTRIA

On 2014-02-3, at 15:17 , Thomas Markus wrote:

> Hi Markus,
>
> das ist mit einem Index nicht zu lösen.
>
> Test:
>
> create temp table test(id int);
> create index test1 on test(id asc);
>
> insert into test values (1),(2),(3);
> select * from test;
>
> delete from test where id=2;
> insert into test values (2);
> select * from test;
>
>
>
> Gruss
> Thomas
>
> Am 03.02.2014 15:13, schrieb Markus Winand:
>> Du könntest einen Index mit der entsprechend der ORDER BY-Klausel anlegen. Die Daten darin verhalten sich dann wie von dir gewünscht (samt dem extra aufwand die Reihenfolge zu wahren).
>>
>> Ein Index ist natürlich eine Extra-Struktur - die Tabelle selbst bleibt davon unberührt (ausser eben CLUSTER). Falls nötig könntest du den Index für einen Index-Only Scan auslegen, damit hättest du zumindest die lese-performance wie von dir gewünscht.
>>
>> mfg,
>>
>> Markus Winand
>>
>> markus(dot)winand(at)winand(dot)at
>>
>> T +43 1 9444047
>>
>> +++ Das Wichtigste in 140 Zeichen. Unsere SQL Performance Tipps gibt's jetzt auch auf Deutsch:
>>
>> https://twitter.com/SQLPerfTipps/
>>
>>
>> Maderspergerstr. 1-3/9/11
>> 1160 Wien
>> AUSTRIA
>>
>>
>>
>>
>>
>>
>>
>> On 2014-02-3, at 15:06 , Thomas Markus wrote:
>>
>>
>>> Hi Guenther,
>>>
>>> eine Reihenfolge ist nicht definiert ausser du tust es selbst (per ORDER BY). Z.B. mit einer extra Spalte zum Sortieren
>>>
>>>
>>> Gruss
>>> Thomas
>>>
>>>
>>> Am 03.02.2014 15:03, schrieb Guenther Boelter:
>>>
>>>> Zunaechst mal ein herzliches Hello aus der Waerme in die kalte Heimat.
>>>>
>>>> Und natuerlich habe ich mal wieder eine ganz 'einfache' Frage ...
>>>>
>>>> Gibt es unter PostgreSQL die Moeglichkeit einen Datensatz an einer
>>>> bestimmten Stelle in die Datenbank (Tabelle) einzufuegen, also z. B. als
>>>> 10. Datensatz wobei evtl. vorhandene Datensaetze dann entsprechend um 1
>>>> nach hinten verschoben werden?
>>>>
>>>> Sinn und Zweck ist es, die Daten dann spaeter ohne weiteren Aufwand in
>>>> eben genau in der Reihenfolge auch wieder auszugeben. Es geht hier bei
>>>> der Ausgabe immer nur um wenige Datensaetze.
>>>>
>>>> Danke im voraus fuer eure Muehe.
>>>>
>>>> Guenther
>>>> Davao City, Philippines, Planet Earth, 28.0 °C (im Schatten!)
>>>>
>>>>
>>>> -- DavaoSOFT, the home of ERPel ERPel, das deutsche
>>>> Warenwirtschaftssystem fuer LINUX
>>>> http://www.davaosoft.com
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Sent via pgsql-de-allgemein mailing list (
>>> pgsql-de-allgemein(at)postgresql(dot)org
>>> )
>>> To make changes to your subscription:
>>>
>>> http://www.postgresql.org/mailpref/pgsql-de-allgemein
>>
>>
>>
>
> --
> ===================================================================
> proventis GmbH | Neue Grünstrasse 25-26 | D-10179 Berlin |
> Tel +49 30 29 36 399 22 | Fax -50 |
> t(dot)markus(at)proventis(dot)net
>
> -------------------------------------------------------------------
> Geschäftsführer: Norman Frischmuth | Sitz: Berlin
> Handelsregister: AG Berlin-Charlottenburg, HRB 82917
> -------------------------------------------------------------------
> Blue Ant - webbasiertes Multi-Projektmanagement - mehr Infos unter:
>
> Veranstaltungen
>
> http://www.proventis.net/de/blue-ant/veranstaltungen.html
>
>
> Support
>
> http://www.proventis.net/de/blue-ant/support.html
>
>
> Blue Ant auf Facebook
>
> http://www.facebook.com/Multi.Projektmanagement.Software.BlueAnt
>
> ===================================================================
>
> <gadiceba.png>

In response to

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Andreas Kretschmer - internet24 GmbH 2014-02-04 08:46:46 Re: Datensatz an vorbestimmter Stelle einfuegen.
Previous Message Gunnar "Nick" Bluth 2014-02-03 18:59:22 Re: Datensatz an vorbestimmter Stelle einfuegen.