Re: Abfrage nach einer Reihe von Jahren

Lists: Postg스포츠 토토 사이트SQL
From: Gunnar Oehmichen <oehm8895(at)uni-landau(dot)de>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Abfrage nach einer Reihe von Jahren
Date: 2013-10-02 10:36:38
Message-ID: 524BF736.101@uni-landau.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

Einen schönen Guten Tag liebe Postgres-Liste,

folgende Tabelle (bzw der Übersicht halber nur ein paar Spalten).

samplenr, samplsite_id, land, date FROM mzb WHERE land = 'Niedersachsen'
LIMIT 10;

samplenr | samplsite_id | land | date
----------+--------------+---------------+------------
739301 | 607652 | Niedersachsen | 1998-09-24
515068 | 600708 | Niedersachsen | 2004-07-14
450866 | 602209 | Niedersachsen | 1988-07-07
472640 | 602324 | Niedersachsen | 1987-09-01
710011 | 603843 | Niedersachsen | 2007-09-15
682046 | 604267 | Niedersachsen | 1999-06-09
349092 | 604433 | Niedersachsen | 1986-10-01
641748 | 605520 | Niedersachsen | 1992-05-18
340837 | 607422 | Niedersachsen | 1989-09-12
616966 | 600421 | Niedersachsen | 1994-05-25
(10 rows)

land hat mehrere Einträge

Alle Samplesites wurden meist jährlich beprobt mit mehreren samplenr pro
date, aber die Tabelle enthält samplesites unterschiedlichster Zeiträume
(zB nur von 1982 bis 1984 beprobt).Ich möchte einen bestimmten Zeitraum
betrachten, sagen wir mal 1999-2002.

Zu erst einmal eine Abfrage, welche die Anzahl der samplsite_id, als
count(distinct (samplsite_id)), der Proben in allen Jahren dieses
Zeitraumes ausgibt.

SELECT
mzb.land,
count ( distinct (mzb.samplsite_id))
FROM
public.mzb
WHERE
EXTRACT (year from mzb.date) = 1999 AND
EXTRACT (year from mzb.date) = 2000 AND
EXTRACT (year from mzb.date) = 2001 AND
EXTRACT (year from mzb.date) = 2002
GROUP BY mzb.land;

land | count
------+-------
(0 rows)

Ich muss hier einen Fehler gemacht haben, da zum Beispiel folgende
Abfrage besagt (über weitere Abfragen rausgefunden), dass samplsite
800963 in den entsprechenden Jahren Einträge hat.

SELECT distinct ( EXTRACT (YEAR from date)) as Probejahr
from mzb where samplsite_id = 800963
Order by Probejahr;

bla
------
...
1997
1999
2000
2001
2002
2003
2004
(21 rows)

Die grundsätzliche Frage, wie kann ich nach samplsites_id filtern welche
in allen Jahren eines bestimmten Zeitraumes beprobt wurden?

Vielen Lieben Dank,

Gunnar
--
Gunnar Oehmichen
Quantitative Landscape Ecology
Institute for Environmental Sciences
University Koblenz-Landau
Fortstrasse 7
76829 Landau
Germany
http://www.uni-koblenz-landau.de/landau/fb7/umweltwissenschaften/landscape-ecology/Staff/gunnaroehmichen


From: Andreas Gaab <A(dot)Gaab(at)scanlab(dot)de>
To: 'Gunnar Oehmichen' <oehm8895(at)uni-landau(dot)de>, "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org>
Subject: Re: Abfrage nach einer Reihe von Jahren
Date: 2013-10-02 10:51:35
Message-ID: 48DA836F3865C54B8FBF424A3B775AF6A1AF5D1103@Exchange-Server
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

Hallo Gunnar,

Die where-Klausel sollte wohl ver-odert werden:

WHERE
EXTRACT (year from mzb.date) = 1999 OR
EXTRACT (year from mzb.date) = 2000 OR
EXTRACT (year from mzb.date) = 2001 OR
EXTRACT (year from mzb.date) = 2002

Alternativ sollte folgendes auch klappen:

WHERE
mzb.date > '01.01.1999'::timestamp AND
mzb.date < '31.12.2002'::timestamp

Gruss
Andreas

-----Ursprüngliche Nachricht-----
Von: pgsql-de-allgemein-owner(at)postgresql(dot)org [mailto:pgsql-de-allgemein-owner(at)postgresql(dot)org] Im Auftrag von Gunnar Oehmichen
Gesendet: Mittwoch, 2. Oktober 2013 12:37
An: pgsql-de-allgemein(at)postgresql(dot)org
Betreff: [pgsql-de-allgemein] Abfrage nach einer Reihe von Jahren


From: bernhard <bs(at)bit-field(dot)de>
To: Gunnar Oehmichen <oehm8895(at)uni-landau(dot)de>, pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Abfrage nach einer Reihe von Jahren
Date: 2013-10-02 10:52:09
Message-ID: 524BFAD9.10007@bit-field.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: Postg스포츠 토토 사이트SQL

Hallo Gunnar,

>
> SELECT
> mzb.land,
> count ( distinct (mzb.samplsite_id))
> FROM
> public.mzb
> WHERE
> EXTRACT (year from mzb.date) = 1999 AND
> EXTRACT (year from mzb.date) = 2000 AND
> EXTRACT (year from mzb.date) = 2001 AND
> EXTRACT (year from mzb.date) = 2002
> GROUP BY mzb.land;
>

OR statt AND?

oder IN (1999, 2000, 2001, 2002)
oder BETWEEN 1999 AND 2002

Gruß
Bernhard


From: Andreas Kretschmer <akretschmer(at)spamfence(dot)net>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Abfrage nach einer Reihe von Jahren
Date: 2013-10-02 10:55:38
Message-ID: 20131002105538.GA23695@tux
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

Gunnar Oehmichen <oehm8895(at)uni-landau(dot)de> wrote:

> WHERE
> EXTRACT (year from mzb.date) = 1999 AND
> EXTRACT (year from mzb.date) = 2000 AND
> EXTRACT (year from mzb.date) = 2001 AND
> EXTRACT (year from mzb.date) = 2002

error in mod_logic:

Ein Datum kann nicht gleichzeitig in mehreren Jahren sein. Ich denke, Du
suchst BETWEEN:

where mzb.date between '1999-01-01' and '2002-12-31'

oder so in der Art.

Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly." (unknown)
Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°


From: bernhard <bs(at)bit-field(dot)de>
To: Andreas Gaab <A(dot)Gaab(at)scanlab(dot)de>, 'Gunnar Oehmichen' <oehm8895(at)uni-landau(dot)de>, "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org>
Subject: Re: Abfrage nach einer Reihe von Jahren
Date: 2013-10-02 11:00:41
Message-ID: 524BFCD9.5060602@bit-field.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

Hallo Andreas,
> Alternativ sollte folgendes auch klappen:
>
> WHERE
> mzb.date > '01.01.1999'::timestamp AND
> mzb.date < '31.12.2002'::timestamp
>
>
muß das nicht

mzb.date <= '31.12.2002'::timestamp

sein?

Gruß
Bernhard


From: Gunnar Oehmichen <oehm8895(at)uni-landau(dot)de>
To: bs(at)bit-field(dot)de, Andreas Gaab <A(dot)Gaab(at)scanlab(dot)de>, "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org>
Subject: Re: Abfrage nach einer Reihe von Jahren
Date: 2013-10-02 12:59:42
Message-ID: 524C18BE.4070701@uni-landau.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

Hey, vielen lieben Dank,

Entschuldigt die fehlende Information des Formats, date (date).
nur die OR Variante bringt mir nicht das was ich will. Ich weiss sie
funktioniert:

SELECT mzb.land,
count ( distinct (mzb.samplsite_id)) AS AnzahlProbestellen
FROM public.mzb WHERE
EXTRACT (year from mzb.date) = 1999 OR
EXTRACT (year from mzb.date) = 2000 OR
EXTRACT (year from mzb.date) = 2001 OR
EXTRACT (year from mzb.date) = 2002
GROUP BY mzb.land;

land | anzahlprobestellen
-----------------------+--------------------
Bayern | 32
MecklenburgVorpommern | 10
Niedersachsen | 1601
NordrheinWestfalen | 854
RheinlandPfalz | 791
SchleswigHolstein | 3
(6 rows)

Führe ich diese aus, bekomme ich alle Probestellen wiedergegeben, welche
in EINEM (siehe unten) der angegebenen Jahre Einträge haben. Wichtig ist
mir jedoch zu wissen, welche Probestellen denn in ALLEN diesen Jahren
beprobt wurden.

Das gleiche Ergebnis liefern:

WHERE EXTRACT (YEAR FROM mzb.date) IN (1999, 2000, 2001, 2002)

WHERE mzb.date >= '01.01.1999'::timestamp AND
mzb.date <= '31.12.2002'::timestamp

und

WHERE EXTRACT (YEAR FROM mzb.date) BETWEEN 1999 AND 2002

Mit der Abfrage sehe ich nun die Jahre in welchem die oben bei SH
gezählten Probestellen Einträge haben:

SELECT land,
mzb.samplsite_id,
EXTRACT (YEAR FROM date) AS Probejahr
FROM
public.mzb WHERE mzb.land = 'SchleswigHolstein' AND
(EXTRACT (year from mzb.date) = 1999 OR
EXTRACT (year from mzb.date) = 2000 OR
EXTRACT (year from mzb.date) = 2001 OR
EXTRACT (year from mzb.date) = 2002)
GROUP BY mzb.samplsite_id, mzb.land, Probejahr;

land | samplsite_id | probejahr
-------------------+--------------+-----------
SchleswigHolstein | 1200004 | 2000
SchleswigHolstein | 1200003 | 2000
SchleswigHolstein | 1200005 | 2002
SchleswigHolstein | 1200005 | 2001
(4 rows)

Wie ihr seht beinhaltet die OR Abfrage alle Probestellen, welche in
einem der besagten Jahre Einträge haben. Ziel ist jedoch solche
aufzuführen oder zu zählen, die in ALLEN Jahren beprobt wurden.

Warum macht eigentlich die AND Abfrage wie erst von mir gedacht keinen
Sinn? Eine Zeile kann ja nicht mehrere Werte in der date-Spalte haben,
die dann auch noch aus unterschiedlichen Jahren wären, wenn ich das
richtig verstehe.

Gruß,

Gunnar

Am 02.10.2013 13:00, schrieb bernhard:
> Hallo Andreas,
>> Alternativ sollte folgendes auch klappen:
>>
>> WHERE
>> mzb.date > '01.01.1999'::timestamp AND
>> mzb.date < '31.12.2002'::timestamp
>>
>>
> muß das nicht
>
> mzb.date <= '31.12.2002'::timestamp
>
> sein?
>
> Gruß
> Bernhard
>

--
Gunnar Oehmichen
Quantitative Landscape Ecology
Institute for Environmental Sciences
University Koblenz-Landau
Fortstrasse 7
76829 Landau
Germany
http://www.uni-koblenz-landau.de/landau/fb7/umweltwissenschaften/landscape-ecology/Staff/gunnaroehmichen


From: Lars Grundei <l(dot)grundei(at)meteocontrol(dot)de>
To: "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org>
Subject: Re: Abfrage nach einer Reihe von Jahren
Date: 2013-10-02 13:19:38
Message-ID: 0EAF4A34C2A33B4FB958F0A6150072AC4B8C065BF3@mcsrv03.meteocontrol.intra
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

>
> Mit der Abfrage sehe ich nun die Jahre in welchem die oben bei SH
gezählten
> Probestellen Einträge haben:
>
> SELECT land,
> mzb.samplsite_id,
> EXTRACT (YEAR FROM date) AS Probejahr FROM
> public.mzb WHERE mzb.land = 'SchleswigHolstein' AND
> (EXTRACT (year from mzb.date) = 1999 OR
> EXTRACT (year from mzb.date) = 2000 OR
> EXTRACT (year from mzb.date) = 2001 OR
> EXTRACT (year from mzb.date) = 2002) GROUP BY mzb.samplsite_id,
mzb.land,
> Probejahr;
>
> land | samplsite_id | probejahr
> -------------------+--------------+-----------
> SchleswigHolstein | 1200004 | 2000
> SchleswigHolstein | 1200003 | 2000
> SchleswigHolstein | 1200005 | 2002
> SchleswigHolstein | 1200005 | 2001
> (4 rows)
>
> Wie ihr seht beinhaltet die OR Abfrage alle Probestellen, welche in einem
der
> besagten Jahre Einträge haben. Ziel ist jedoch solche aufzuführen oder zu
> zählen, die in ALLEN Jahren beprobt wurden.

Dann wirst du noch ein bauen müssen, dass jedes Jahr mindestens eine Zeile
liefert
... ((EXTRACT (year from mzb.date) = 1999 AND (SELECT COUNT(*) FROM ...) >=
1) OR...) GROUP BY

>
> Warum macht eigentlich die AND Abfrage wie erst von mir gedacht keinen
Sinn?
> Eine Zeile kann ja nicht mehrere Werte in der date-Spalte haben, die dann
auch
> noch aus unterschiedlichen Jahren wären, wenn ich das richtig verstehe.

Da ist doch auch das Problem, du verlangst die Spalte muss gleichzeitig
genau mehreren Werten entsprechen, kann nicht klappen - genauso wie if(1==a
&& 2==a) nie klappen wird.

>
> Gruß,
>
> Gunnar
>
>
> Am 02.10.2013 13:00, schrieb bernhard:
> > Hallo Andreas,
> >> Alternativ sollte folgendes auch klappen:
> >>
> >> WHERE
> >> mzb.date > '01.01.1999'::timestamp AND
> >> mzb.date < '31.12.2002'::timestamp
> >>
> >>
> > muß das nicht
> >
> > mzb.date <= '31.12.2002'::timestamp
> >
> > sein?
> >
> > Gruß
> > Bernhard
> >
>
>
> --
> Gunnar Oehmichen
> Quantitative Landscape Ecology
> Institute for Environmental Sciences
> University Koblenz-Landau
> Fortstrasse 7
> 76829 Landau
> Germany
>
http://www.uni-koblenz-landau.de/landau/fb7/umweltwissenschaften/landscape-
> ecology/Staff/gunnaroehmichen
>
>
> --
> 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


From: Andreas Kretschmer <akretschmer(at)spamfence(dot)net>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Abfrage nach einer Reihe von Jahren
Date: 2013-10-02 13:24:53
Message-ID: 20131002132453.GA970@tux
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

Gunnar Oehmichen <oehm8895(at)uni-landau(dot)de> wrote:

> Führe ich diese aus, bekomme ich alle Probestellen wiedergegeben, welche
> in EINEM (siehe unten) der angegebenen Jahre Einträge haben. Wichtig ist
> mir jedoch zu wissen, welche Probestellen denn in ALLEN diesen Jahren
> beprobt wurden.

Ahhh...

Du hast:

test=*# select * from gunnar ;
jahr | probe
------+-------
1 | 10
2 | 11
3 | 12
2 | 10
3 | 10
(5 rows)

Nur probe nummer 10 ist in den jahren 1,2 und 3 vertreten, die suchst
Du:

test=*# select probe, array_agg(jahr) from gunnar group by probe having
array[1,2,3] = array_agg(jahr);
probe | array_agg
-------+-----------
10 | {1,2,3}
(1 row)

Es gibt noch ca. 127399 andere Wege ...

Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly." (unknown)
Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°


From: Andreas Kretschmer <akretschmer(at)spamfence(dot)net>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Abfrage nach einer Reihe von Jahren
Date: 2013-10-02 13:31:41
Message-ID: 20131002133141.GA1801@tux
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

Andreas Kretschmer <akretschmer(at)spamfence(dot)net> wrote:

> test=*# select probe, array_agg(jahr) from gunnar group by probe having
> array[1,2,3] = array_agg(jahr);
> probe | array_agg
> -------+-----------
> 10 | {1,2,3}
> (1 row)
>
>
> Es gibt noch ca. 127399 andere Wege ...

besser vielleicht die Arrays mit @> untersuchen, also CONTAINS statt
Gleichheit.

Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly." (unknown)
Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°


From: Gunnar Oehmichen <oehm8895(at)uni-landau(dot)de>
To: pgsql-de-allgemein(at)postgresql(dot)org, akretschmer(at)spamfence(dot)net
Subject: Re: Abfrage nach einer Reihe von Jahren
Date: 2013-10-03 11:48:42
Message-ID: 524D599A.2040303@uni-landau.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

So,

ich habs rausbekommen, danke für eure Hinweise, hat auf jeden Fall geholfen:

1. Die Abfrage wie oben:

SELECT
mzb.land AS land,
mzb.samplsite_id AS ss_id,
EXTRACT (YEAR FROM date) as Probejahr
FROM
public.mzb
WHERE EXTRACT (YEAR FROM mzb.date) BETWEEN 1999 AND 2002
GROUP BY mzb.samplsite_id, mzb.land, Probejahr
ORDER BY ss_id
LIMIT 10

land | ss_id | probejahr
--------+--------+-----------
Bayern | 200005 | 2000
Bayern | 200005 | 2001
Bayern | 200010 | 2001
Bayern | 200010 | 1999
Bayern | 200020 | 2001
Bayern | 200020 | 1999
Bayern | 200020 | 2000
Bayern | 200027 | 1999
Bayern | 200036 | 2001
Bayern | 200036 | 2000
(10 rows)

Wir sehen, eine Probestelle, mehrere Jahre (200005) oder nur ein Jahr
(200027).

Diese Abfrage wird als Subquery benutzt, ich zähle die Jahre pro
Probestelle und filtere mit HAVING auf Zeilen welche nur 4 und somit
alle Probejahre enthalten:

Select Subtable.land,
Subtable.ss_id,
count ( distinct ( Subtable.Probejahr)) as AnzahlJahre
FROM
( SELECT
mzb.land AS land,
mzb.samplsite_id AS ss_id,
EXTRACT (YEAR FROM date) as Probejahr
FROM
public.mzb
WHERE EXTRACT (YEAR FROM mzb.date) BETWEEN 1999 AND 2002
GROUP BY mzb.samplsite_id, mzb.land, Probejahr ) AS Subtable

GROUP BY Subtable.ss_id, Subtable.land
HAVING count ( distinct ( Subtable.Probejahr)) = 4
ORDER BY AnzahlJahre DESC
LIMIT 10;

land | ss_id | anzahljahre
--------+--------+-------------
Bayern | 200071 | 4
Bayern | 200078 | 4
Bayern | 200088 | 4
Bayern | 200112 | 4
Bayern | 200323 | 4
Bayern | 200333 | 4
Bayern | 200334 | 4
Bayern | 200336 | 4
Bayern | 200337 | 4
Bayern | 200050 | 4
(10 rows)

@ Andreas, deine Variante ist interessant und funktioniert auch.

SELECT mzb.land AS land,
mzb.samplsite_id AS ss_id,
array_agg ( distinct (EXTRACT (YEAR FROM date))) as Probejahre
FROM
public.mzb
WHERE EXTRACT (YEAR FROM mzb.date) BETWEEN 1999 AND 2002
GROUP BY mzb.samplsite_id, mzb.land
HAVING array[1999, 2000, 2001, 2002]::float8[] = array_agg ( distinct
(EXTRACT (YEAR FROM date)))
LIMIT 10

@> contains zu verwenden ist in dem Fall nicht sinnvoll, da lediglich
getestet wird ob aus array[1999, 2000, 2001, 2002] Elemente in array_agg
( distinct (EXTRACT (YEAR FROM date))) entahlten sind, was ja für jede
Zeile stimmt, also nochmal das BETWEEN wiederholen.

Obige Abfrage mit:

HAVING array[1999, 2000, 2001, 2002]::float8[] @> array_agg ( distinct
(EXTRACT (YEAR FROM date)))

land | ss_id | probejahre
--------+--------+-----------------------
Bayern | 200005 | {2000,2001}
Bayern | 200010 | {1999,2001}
Bayern | 200020 | {1999,2000,2001}
Bayern | 200027 | {1999}
Bayern | 200036 | {1999,2000,2001}
Bayern | 200050 | {1999,2000,2001,2002}
Bayern | 200068 | {1999,2001}
Bayern | 200071 | {1999,2000,2001,2002}
Bayern | 200078 | {1999,2000,2001,2002}
Bayern | 200088 | {1999,2000,2001,2002}
(10 rows)

Jo, herzlichen Dank euch und beste Grüße,

Gunnar

--
Gunnar Oehmichen
Quantitative Landscape Ecology
Institute for Environmental Sciences
University Koblenz-Landau
Fortstrasse 7
76829 Landau
Germany
http://www.uni-koblenz-landau.de/landau/fb7/umweltwissenschaften/landscape-ecology/Staff/gunnaroehmichen


From: Thomas Markus <t(dot)markus(at)proventis(dot)net>
To: "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org>
Subject: Re: Abfrage nach einer Reihe von Jahren
Date: 2013-10-07 07:01:08
Message-ID: 52525C34.2040105@proventis.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

Moins,
> Führe ich diese aus, bekomme ich alle Probestellen wiedergegeben,
> welche in EINEM (siehe unten) der angegebenen Jahre Einträge haben.
> Wichtig ist mir jedoch zu wissen, welche Probestellen denn in ALLEN
> diesen Jahren beprobt wurden.

dann versuchs mal mit

select mzb.land, count ( distinct (mzb.samplsite_id)) AS AnzahlProbestellen
from public.mzb
group by mzb.land
having array_agg(distinct extract(year from mzb.date)::int) =
ARRAY[1999,2000,2001,2002]

Gruss
Thomas


From: Thomas Markus <t(dot)markus(at)proventis(dot)net>
To: "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org>
Subject: Re: Abfrage nach einer Reihe von Jahren
Date: 2013-10-07 07:31:30
Message-ID: 52526352.80209@proventis.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

und schon ist ein Fehler drin ;)

select mzb.land, count ( distinct (mzb.samplsite_id)) AS AnzahlProbestellen
from public.mzb
group by mzb.land
having array_agg(distinct extract(year from mzb.date)::int) @>
ARRAY[1999,2000,2001,2002]

Am 07.10.2013 09:01, schrieb Thomas Markus:
> Moins,
>> Führe ich diese aus, bekomme ich alle Probestellen wiedergegeben,
>> welche in EINEM (siehe unten) der angegebenen Jahre Einträge haben.
>> Wichtig ist mir jedoch zu wissen, welche Probestellen denn in ALLEN
>> diesen Jahren beprobt wurden.
>
> dann versuchs mal mit
>
> select mzb.land, count ( distinct (mzb.samplsite_id)) AS
> AnzahlProbestellen
> from public.mzb
> group by mzb.land
> having array_agg(distinct extract(year from mzb.date)::int) =
> ARRAY[1999,2000,2001,2002]
>
> Gruss
> Thomas
>
>
>


From: Gunnar Oehmichen <oehm8895(at)uni-landau(dot)de>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Schema backup und Wiederherstellen in neuer Datenbank
Date: 2013-11-14 13:20:02
Message-ID: 5284CE02.8080001@uni-landau.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

Hallöchen,

folgendes Problem gerade.

Ich habe eine PostgisDatenbank, Datentabellen sind in einem extra Schema
OSM_Data. Ich wollte die Daten auf einen externen Server in eine
bereits bestehende Datenbank laden. Um Probleme durch unterschiedliche
PostGIS versionen zu vermeiden und nicht die ganzen PostGIS funktionen
ebenfalls zu dumpen, dachte ich, es sei besser nur das Schema "OSM_Data"
zu sichern

Lokale Maschine:

Distributor ID: Ubuntu
Description: Ubuntu 12.04.3 LTS
Release: 12.04
Codename: precise

Postgresql

Source: postgresql-common (129ubuntu1)
Version: 9.1+129ubuntu1
Depends: postgresql-9.1

Postgis 2.0.1-2~precise3

Mit PGAdmin3 erstelle ich den Dump von meiner lokalen Maschine:

/usr/bin/pg_dump --host localhost --port 5432 --username "postgres"
--no-password --format tar --no-privileges --verbose --file
".../OSM_Oberrhein.backup" --schema "osm_data" "OSM_Oberrhein.backup"
pg_dump: reading schemas
pg_dump: reading user-defined tables
pg_dump: reading extensions
pg_dump: reading user-defined functions
pg_dump: reading user-defined types
pg_dump: reading procedural languages
pg_dump: reading user-defined aggregate functions
pg_dump: reading user-defined operators
pg_dump: reading user-defined operator classes
pg_dump: reading user-defined operator families
pg_dump: reading user-defined text search parsers
pg_dump: reading user-defined text search templates
pg_dump: reading user-defined text search dictionaries
pg_dump: reading user-defined text search configurations
pg_dump: reading user-defined foreign-data wrappers
pg_dump: reading user-defined foreign servers
pg_dump: reading default privileges
pg_dump: reading user-defined collations
pg_dump: reading user-defined conversions
pg_dump: reading type casts
pg_dump: reading table inheritance information
pg_dump: finding extension members
pg_dump: finding inheritance relationships
pg_dump: reading column info for interesting tables
pg_dump: finding the columns and types of table "planet_osm_point"
pg_dump: finding default expressions of table "planet_osm_point"
pg_dump: finding the columns and types of table "planet_osm_roads"
pg_dump: finding default expressions of table "planet_osm_roads"
pg_dump: finding the columns and types of table "planet_osm_line"
pg_dump: finding default expressions of table "planet_osm_line"
pg_dump: finding the columns and types of table "planet_osm_polygon"
pg_dump: finding default expressions of table "planet_osm_polygon"
pg_dump: finding the columns and types of table "streets_landau_3857"
pg_dump: flagging inherited columns in subtables
pg_dump: reading indexes
pg_dump: reading indexes for table "planet_osm_point"
pg_dump: reading indexes for table "planet_osm_roads"
pg_dump: reading indexes for table "planet_osm_line"
pg_dump: reading indexes for table "planet_osm_polygon"
pg_dump: reading constraints
pg_dump: reading triggers
pg_dump: reading rewrite rules
pg_dump: reading dependency data
pg_dump: saving encoding = UTF8
pg_dump: saving standard_conforming_strings = on
pg_dump: dumping contents of table planet_osm_line
pg_dump: dumping contents of table planet_osm_point
pg_dump: dumping contents of table planet_osm_polygon
pg_dump: dumping contents of table planet_osm_roads

Prozess beendete mit Exitcode 0.

Daraufhin habe ich also die .backup datei (2.8 Gb) auf den Server kopiert.

Externer Server:

Distributor ID: Ubuntu
Description: Ubuntu 12.04.3 LTS
Release: 12.04
Codename: precise

Postgresql

Source: postgresql-common (129ubuntu1)
Version: 9.1+129ubuntu1
Depends: postgresql-9.1

Postgis 2.0.2

Auf dem Server greife ich mittels PGAdmin3 (Installation auf dem Server)
ebenfalls auf das Backup zu. Ich habe zuvor ein neues Schema "OSM_data"
in einer bereits vorhandenen Datenbank erstellt

/usr/bin/pg_restore --host localhost --port 5432 --username "oehmichen"
--dbname "gisdata" --no-password --schema-only --schema \"OSM_data\"
--verbose ".../OSM_Oberrhein.backup"
pg_restore: connecting to database for restore
pg_restore: implied data-only restore

Prozess beendete mit Exitcode 0.

Und ebenfalls:

/usr/bin/pg_restore --host localhost --port 5432 --username "oehmichen"
--dbname "gisdata" --no-password --data-only --schema \"OSM_data\"
--verbose "/home/gisroot/INSERT/OSM_Oberrhein.backup"
pg_restore: connecting to database for restore

Prozess beendete mit Exitcode 0.

Nach beiden Versuchen ist im Schema und der Datenbank nichts passiert.

Beste Grüße und herzlichen Dank,

Gunnar

--
Gunnar Oehmichen
Quantitative Landscape Ecology
Institute for Environmental Sciences
University Koblenz-Landau
Fortstrasse 7
76829 Landau
Germany
http://www.uni-koblenz-landau.de/landau/fb7/umweltwissenschaften/landscape-ecology/Staff/gunnaroehmichen


From: Andreas Kretschmer <akretschmer(at)spamfence(dot)net>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Schema backup und Wiederherstellen in neuer Datenbank
Date: 2013-11-14 17:24:02
Message-ID: 20131114172402.GA8175@tux
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

Gunnar Oehmichen <oehm8895(at)uni-landau(dot)de> wrote:

also ich seh da nix prinzipiell falsches (wobei ich noch nicht mit dem
tar-Format gespielt habe, ich finde -Fc einfach besser.

Wie ist das mit der Laufzeit? Kommt das hin, daß da was eingespielt
wird?

Und ja:

wenn Du einen neuen Thread, also ein neues Thema aufmachen willst, dann
mache das. Und zwar richtig.

Wenn Du nur antwortest und dabei das Subject änderst ist das dennoch
eine Antwort in einem komplett falschen Thread.

Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly." (unknown)
Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°