<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - duplicate key violates unique constraint - jak znaleźć winowajcę]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=272&amp;type=atom"/>
	<updated>2009-08-20T11:27:44Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=272</id>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint - jak znaleźć winowajcę]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1169#p1169"/>
			<content type="html"><![CDATA[To zapytanie delete, skasuje wszystkie wiersze z measurment_id=123.
Sprawdz czy masz zdefiniowane w tabeli oid'y np zapytaniem
[code]
select  oid, measurment_id from eam_measurement_data;
[/code]
Czy pojawia sie jakies wartosci w kolumnie oid (i czy w ogóle pojawi sie kolumna oid)]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2009-08-20T11:27:44Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1169#p1169</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint - jak znaleźć winowajcę]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1168#p1168"/>
			<content type="html"><![CDATA[Jeszcze jedno pytanie jak skasować duplikaty i zostawić tylko 1 oryginał?
To usuwa wszystko, choć zaznaczyłem offsetem aby zostawił pierwszy wpis.
 delete from eam_measurement_data where measurement_id in (select measurement_id from eam_measurement_data where measurement_id='123' and timestamp='456' offset 1);]]></content>
			<author>
				<name><![CDATA[zbiggy]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=962</uri>
			</author>
			<updated>2009-08-20T10:09:58Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1168#p1168</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint - jak znaleźć winowajcę]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1161#p1161"/>
			<content type="html"><![CDATA[Dzięki za linka. Poczytałem trochę  też o primary key i zrozumiałem, że może być na więcej niż jednej kolumnie. Wtedy w kolumnach mogą być podwójne wpisy i to jest OK. Dopiero kiedy wszystkie kolumny będące indexem zawierają jako wiersz to samo co inny wiersz w tej tabeli to wtedy jest błąd.]]></content>
			<author>
				<name><![CDATA[zbiggy]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=962</uri>
			</author>
			<updated>2009-08-19T09:15:02Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1161#p1161</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint - jak znaleźć winowajcę]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1160#p1160"/>
			<content type="html"><![CDATA[Klucz nie musi byc na jednej kolumnie, może byc na dwu i więcej i tu jest na dwóch kolumnach measurement_id, "timestamp".
Nie sądzę aby celem REINDEX było m.in. usuwanie  wierszy, trochę to by bylo niebezpieczne chyba, nie myślisz.
Tu [url]http://www.postgresql.org/docs/8.2/static/sql-reindex.html[/url] masz napisane kiedy używa się REINDEX]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2009-08-19T08:56:55Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1160#p1160</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint - jak znaleźć winowajcę]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1159#p1159"/>
			<content type="html"><![CDATA[Dzięki za tego selecta do wyszukiwania podwójnych wpisów. Mam jeszcze jedno pytanie. Patrząc na tę tabelę powyżej czy mógłbyś mi powiedzieć na postawie tego błędu która kolumna zawiera ten błędny podwójny wpis? Bo jak popatrzyłem na to:
[code]ERROR:  duplicate key violates unique constraint "measurement_data_id_time_pk"[/code]
potem na to:
[code]ALTER TABLE ONLY eam_measurement_data
    ADD CONSTRAINT measurement_data_id_time_pk PRIMARY KEY (measurement_id, "timestamp");[/code]
i w końcu na to:
[code]hqdb-# \d eam_measurement_data
    Table "public.eam_measurement_data"
     Column     |     Type      | Modifiers 
----------------+---------------+-----------
 measurement_id | integer       | not null
 timestamp      | bigint        | not null
 value          | numeric(24,5) | 
Indexes:
    "measurement_data_id_time_pk" PRIMARY KEY, btree (measurement_id, "timestamp")
    "measurement_data_time_idx" btree ("timestamp")[/code]

To w końcu zgłupiałem do reszty. Na których kolumnach jest wreszcie ten zepsuty PK? measurement_id czy timestamp?
przecież PK to zawsze jedna kolumna, a tu są dwie.

Skoro REINDEX DATABASE jest do naprawiania indeksów to jak to może zrobić bez usuwania podwójnego pk? Przecież jedynym błędem pk jest właśnie podwójny wpis. Bez tego to narzędzie jest bez sensu.]]></content>
			<author>
				<name><![CDATA[zbiggy]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=962</uri>
			</author>
			<updated>2009-08-19T08:42:18Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1159#p1159</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint - jak znaleźć winowajcę]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1158#p1158"/>
			<content type="html"><![CDATA[Zacząłem tropić problem i wyszukałem jeszcze to:
[code]
hqdb-# \d eam_measurement_data
    Table "public.eam_measurement_data"
     Column     |     Type      | Modifiers 
----------------+---------------+-----------
 measurement_id | integer       | not null
 timestamp      | bigint        | not null
 value          | numeric(24,5) | 
Indexes:
    "measurement_data_id_time_pk" PRIMARY KEY, btree (measurement_id, "timestamp")
    "measurement_data_time_idx" btree ("timestamp")[/code]]]></content>
			<author>
				<name><![CDATA[zbiggy]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=962</uri>
			</author>
			<updated>2009-08-19T08:23:11Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1158#p1158</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint - jak znaleźć winowajcę]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1157#p1157"/>
			<content type="html"><![CDATA[[quote=rski]Tak znajdziesz duble
[code]
select measurement_id, timestamp, count(*) from eam_measurement_data
group by  measurement_id, timestamp having count(*)>1
[/code]

[quote]
Dlaczego REINDEX DATABASE tego nie załatwił? Przecież do tego jest przeznaczony?
[/quote]
nie rozumiem co masz na mysli. Chcesz aby reindex usunął dublujące się wpisy?[/quote]

Tak. :)]]></content>
			<author>
				<name><![CDATA[zbiggy]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=962</uri>
			</author>
			<updated>2009-08-19T08:19:53Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1157#p1157</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint - jak znaleźć winowajcę]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1156#p1156"/>
			<content type="html"><![CDATA[Tak znajdziesz duble
[code]
select measurement_id, timestamp, count(*) from eam_measurement_data
group by  measurement_id, timestamp having count(*)>1
[/code]

[quote]
Dlaczego REINDEX DATABASE tego nie załatwił? Przecież do tego jest przeznaczony?
[/quote]
nie rozumiem co masz na mysli. Chcesz aby reindex usunął dublujące się wpisy?]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2009-08-19T08:15:28Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1156#p1156</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint - jak znaleźć winowajcę]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1155#p1155"/>
			<content type="html"><![CDATA[[quote=rski]Kiedy dostajesz ten error?, po jakiej operacji? bo z założenia nie ma możliwości aby istniały dwie wartości klucza głownego o tej samej wartości w tabeli.
Poza tym to co podajesz measurement_data_id_time_pk to prawdopodobie nie jest nazwa klolumny tylko constrainta który siedzi na jakiejś kolumnie. Wszystkie potrzebne informacje aby zidentyfikowac te kolumne w obrębie bazy znajdziesz w information_schema (wiecej znajdziesz tu [url]http://www.postgresql.org/docs/current/static/information-schema.html[/url] )[/quote]

JBoss Operation Network wali tym w logach ciurkiem podczas startu i pokazuje, że serwer jest wiecznie w trybie start in progress (choć już dawno wystartował). Tylko tyle widzę. Za pomocą pg_dump zrobiłem eksport bazy i znalazłem to:

[code]
--
-- Name: measurement_data_id_time_pk; Type: CONSTRAINT; Schema: public; Owner: hqadmin; Tablespace: 
--

ALTER TABLE ONLY eam_measurement_data
    ADD CONSTRAINT measurement_data_id_time_pk PRIMARY KEY (measurement_id, "timestamp");[/code]

Czyli jak w kolumnie measurement_id w tabeli eam_measurement_data znajdę dwa identyczne wpisy i usunę jeden to błąd zniknie?
Jak odnaleźć podwójny wpis w takiej kolumnie?
Dlaczego REINDEX DATABASE tego nie załatwił? Przecież do tego jest przeznaczony?]]></content>
			<author>
				<name><![CDATA[zbiggy]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=962</uri>
			</author>
			<updated>2009-08-19T07:36:28Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1155#p1155</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint - jak znaleźć winowajcę]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1154#p1154"/>
			<content type="html"><![CDATA[Kiedy dostajesz ten error?, po jakiej operacji? bo z założenia nie ma możliwości aby istniały dwie wartości klucza głownego o tej samej wartości w tabeli.
Poza tym to co podajesz measurement_data_id_time_pk to prawdopodobie nie jest nazwa klolumny tylko constrainta który siedzi na jakiejś kolumnie. Wszystkie potrzebne informacje aby zidentyfikowac te kolumne w obrębie bazy znajdziesz w information_schema (wiecej znajdziesz tu [url]http://www.postgresql.org/docs/current/static/information-schema.html[/url] )]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2009-08-18T13:19:42Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1154#p1154</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint - jak znaleźć winowajcę]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1153#p1153"/>
			<content type="html"><![CDATA[[quote=zbiggy]2. Jeśli jednak nie ma takiej metody to jak wyśledzić wadliwy wiersz w całej bazie (nie znam układu tej bazy)?[/quote]
Chodzi mi o to czy jest jakaś wyszukiwarka np. podaję nazwę kolumny a PG pokazuje mi w której  bazie i w której tabeli siedzi ta kolumna.
Czy jest jakiś select, który wypluje tylko podwójne wpisy dla measurement_data_id_time_pk?]]></content>
			<author>
				<name><![CDATA[zbiggy]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=962</uri>
			</author>
			<updated>2009-08-18T11:53:02Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1153#p1153</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[duplicate key violates unique constraint - jak znaleźć winowajcę]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1152#p1152"/>
			<content type="html"><![CDATA[Witam,

mam taki błąd:
ERROR:  duplicate key violates unique constraint "measurement_data_id_time_pk"

Z tego wynika, że chyba gdzieś jest jest 2 razy taki sam primary kluczyk w kolumnie measurement_data_id_time_pk
W celach leczniczych odpaliłem reindex database. Zrobił. Lecz błędu nie naprawił.
Chciałem jeszcze zrobić vacuum verbose lecz skończyły mi się sloty:
NOTICE:  number of page slots needed (30992) exceeds max_fsm_pages (20000)
PODPOWIEDŹ:  Consider increasing the configuration parameter "max_fsm_pages" to a value over 30992.

W końcu się napaliłem, że może jakoś ręcznie SQLem wytnę ten dodatkowy wadliwy wpis. Tylko jak tą kolumnę odnaleźć w bazie i jak wyśledzić który wiersz jest podwójny.

1. Czy ktoś mógłby mi powiedzieć jak to naprawić (może jest lepsza metoda niż moje kombinacje)?
2. Jeśli jednak nie ma takiej metody to jak wyśledzić wadliwy wiersz w całej bazie (nie znam układu tej bazy)?]]></content>
			<author>
				<name><![CDATA[zbiggy]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=962</uri>
			</author>
			<updated>2009-08-18T11:48:53Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1152#p1152</id>
		</entry>
</feed>
