<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - duplicate key violates unique constraint on the primary key]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=1853</link>
		<description><![CDATA[Najświeższe odpowiedzi w duplicate key violates unique constraint on the primary key.]]></description>
		<lastBuildDate>Tue, 11 Jun 2013 08:50:36 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4585#p4585</link>
			<description><![CDATA[Rozumiem, zachowam ostrożność przy operowaniu tymi danymi.

Dla zainteresowanych - w wątku była mowa o impocie jednej z tabel tego przydatnego projektu:
[url]https://code.google.com/p/worlddb/[/url]]]></description>
			<author><![CDATA[dummy@example.com (filozof)]]></author>
			<pubDate>Tue, 11 Jun 2013 08:50:36 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4585#p4585</guid>
		</item>
		<item>
			<title><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4584#p4584</link>
			<description><![CDATA[Jeżeli masz na tabeli klucz unikatowy na kolumny (name, country, region) to nie wprowadzisz dwóch jednakowych wartości dla tych pól (dlatego myślę, że jeden z twoich rekordów jest trochę zmanipulowany np w jednym rekordzie pole name ma wartość "Lipno", a w drugim "Lipno " - spacja na końcu dla postgresa to duża różnica dla człowieka już nie)

PS Ten sam problem dotyczy użycia dużych i małych liter w nazwie dla postgresa to różne wartości - oczywiście są sposoby by sobie z takimi przypadkami radzić ale raczej nie w twoim projekcie (w końcu odwzorowujesz tylko funkcjonalność z już istniejącej bazy na MySQL-u)]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Tue, 11 Jun 2013 06:44:03 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4584#p4584</guid>
		</item>
		<item>
			<title><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4583#p4583</link>
			<description><![CDATA[Hm, a mógłbyś nieco jaśniej, kiedy PRZESTANIE działać? :)

Select znalazł oba Lipna. Wynik:

 country | name  | region 
---------+-------+--------
 PL      | Lipno | 68
 PL      | Lipno | 68]]></description>
			<author><![CDATA[dummy@example.com (filozof)]]></author>
			<pubDate>Mon, 10 Jun 2013 22:50:00 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4583#p4583</guid>
		</item>
		<item>
			<title><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4582#p4582</link>
			<description><![CDATA[Tak będzie działało ale do czasu :)
Spróbuj zewidencjonować w swojej tabeli dwie miejscowości LIPNO (naprawdę istnieją w Polsce)
- Lipno - (woj. kujawsko-pomorskie, powiat: lipnowski, gm/m: Lipno) nr teryt 040801
- Lipno - (woj. kujawsko-pomorskie, powiat: lipnowski, gm/m: Lipno) nr teryt 040806]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Mon, 10 Jun 2013 13:38:22 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4582#p4582</guid>
		</item>
		<item>
			<title><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4581#p4581</link>
			<description><![CDATA[@c_michal, sorry, przeoczyłem twój post. A szkoda, po pomógł :) Dzięki!]]></description>
			<author><![CDATA[dummy@example.com (filozof)]]></author>
			<pubDate>Mon, 10 Jun 2013 12:24:07 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4581#p4581</guid>
		</item>
		<item>
			<title><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4580#p4580</link>
			<description><![CDATA[OK, dam znać, jak znajdę rozwiązanie.]]></description>
			<author><![CDATA[dummy@example.com (filozof)]]></author>
			<pubDate>Mon, 10 Jun 2013 11:31:05 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4580#p4580</guid>
		</item>
		<item>
			<title><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4579#p4579</link>
			<description><![CDATA[nie wiem jak ci odpowiedzieć. zasadniczo tak. ale nie poprzed dołożenie dwóch dodatkowych unique na pozostałych dwóch kolumnach.
poza tym "potrzebuje" - nie wiem czego potrzebujesz. wiem jedynie, ze struktura jaka pokazales z pg, jest inna niz ta z mysqla.]]></description>
			<author><![CDATA[dummy@example.com (depesz)]]></author>
			<pubDate>Mon, 10 Jun 2013 11:29:09 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4579#p4579</guid>
		</item>
		<item>
			<title><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4578#p4578</link>
			<description><![CDATA[wykonaj polecenia
ALTER TABLE city DROP CONSTRAINT city_country_key;
ALTER TABLE city ADD CONSTRAINT city_country_key UNIQUE (name, country, region);

Po wszystkim tabela city nie pozwoli dodać więcej niż jednego miasta w tym samym regionie i państwie]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Mon, 10 Jun 2013 11:29:06 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4578#p4578</guid>
		</item>
		<item>
			<title><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4577#p4577</link>
			<description><![CDATA[Otóż to, to bez sensu. Potrzebuje więc UNIQUE na dodatkowych 2 kolumnach, zgadza się?]]></description>
			<author><![CDATA[dummy@example.com (filozof)]]></author>
			<pubDate>Mon, 10 Jun 2013 11:27:16 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4577#p4577</guid>
		</item>
		<item>
			<title><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4576#p4576</link>
			<description><![CDATA[Tak po mojemy, to ta struktura w pg nie ma sensu. country unique? W sensie możesz mieć tylko jedno miasto w danym kraju?
W mysql'u masz unique na 3 kolumnach: (country, name, region). Czyli jedno miasto o danej nazwie w tym samym regionie w tym samym kraju. Wersja Pg jest zupełnie inna.]]></description>
			<author><![CDATA[dummy@example.com (depesz)]]></author>
			<pubDate>Mon, 10 Jun 2013 11:24:26 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4576#p4576</guid>
		</item>
		<item>
			<title><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4575#p4575</link>
			<description><![CDATA[W kwestii struktury tabeli, framework web2py udostępnia DAL (Data Abstraction Layer), która pozwala na budowanie zapytań SQL w niejawny sposób, co jest szybsze i wygodniejsze dla programistów.

Na przykład [select * from tabela] w web2py wygląda tak: [db.baza.tabela.select()]

Aby zdefiniować więc tabelę bazy danych, nie używam zapytań, a DAL. Wynik zdefiniowanej przeze mnie w ten sposób tabeli 'city' jest następujący:

CREATE TABLE city(
    id SERIAL PRIMARY KEY,
    country VARCHAR(2) UNIQUE,
    region VARCHAR(3),
    url VARCHAR(50),
    name VARCHAR(50),
    latitude FLOAT8,
    longitude FLOAT8
);

Natomiast oryginalna struktura tabeli pod mysql jest taka:

CREATE TABLE `cities` (
  `ID` int(8) unsigned NOT NULL auto_increment,
  `country` char(2) NOT NULL,
  `region` char(3) NOT NULL,
  `url` varchar(50) NOT NULL,
  `name` varchar(50) NOT NULL,
  `latitude` double NOT NULL,
  `longitude` double NOT NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `country` USING BTREE (`country`,`name`,`region`)
) ENGINE=InnoDB AUTO_INCREMENT=207637 DEFAULT CHARSET=utf8;]]></description>
			<author><![CDATA[dummy@example.com (filozof)]]></author>
			<pubDate>Mon, 10 Jun 2013 11:07:23 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4575#p4575</guid>
		</item>
		<item>
			<title><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4574#p4574</link>
			<description><![CDATA[Osobiście strzelam w błędne dane źródłowe (tzn. to co ładujesz). Jeśli w tabeli nic nie ma (select count(*) from tabela jest "0"), a import wywala unique violation, to masz nieunikatowe wartości w danych ładowanych.]]></description>
			<author><![CDATA[dummy@example.com (depesz)]]></author>
			<pubDate>Mon, 10 Jun 2013 10:43:29 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4574#p4574</guid>
		</item>
		<item>
			<title><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4573#p4573</link>
			<description><![CDATA[Wygląda na to, że źle jest zaprojektowana tabela city (ale dla pewności podeślij strukturę tej tabeli)
błąd prawdopodobnie występuje gdy próbujesz dodać więcej niż jedno miasto z tego samego kraju.
Twoja tabela prawdopodobnie wygląda tak
CREATE TABLE public.city
(
   id serial, 
   name character(150), 
   country integer NOT NULL, 
   CONSTRAINT city_pkey PRIMARY KEY (id), 
   CONSTRAINT city_country_key UNIQUE (country)
) 
WITH (OIDS = FALSE);

+ inne kolumny o których nie napisałeś.

możesz usunąć to ograniczenie poniższym poleceniem

ALTER TABLE city DROP CONSTRAINT city_country_key;

Jeśli to Ty tworzyłeś tabelę to zastanów się nad całą strukturą tej tabeli (popatrz na bazę TERYT [url]http://www.stat.gov.pl/broker/access/index.jspa)[/url]
Jeśli korzystasz z jakiegoś gotowego rozwiązania to lepiej pogadaj z kimś kto dobrze zna postgresa zanim zaczniesz coś zmieniać.

UWAGA
Baza TERYT też nie do końca odzwierciedla naszą rzeczywistość ale może być dość dobrym źródłem danych]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Mon, 10 Jun 2013 10:27:36 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4573#p4573</guid>
		</item>
		<item>
			<title><![CDATA[duplicate key violates unique constraint on the primary key]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4571#p4571</link>
			<description><![CDATA[Używam frameworka web2py opartego na Pythonie. Wspieram się PostgreSQL. Obecnie utworzyłem strukturę tabeli 'city' (tabela jest pusta) i staram się zaimportować do niej dane z pliku CSV. Przy każdej próbie importu otrzymuje błąd:

duplicate key violates unique constraint 'city_country_key'

Kolumna 'country' jest ustawiona na UNIQUE.

W sieci znalazłem sporo podobnych problemów i jednym z powodów był brak synchronizacji między 'city' a 'city_id_seq'. W moim przypadku jednak najwyraźniej wszystko gra, ponieważ:

A. select max(id) from city; - nic nie zwraca (tabela 'city' jest pusta jak pisałem)
B. select nextval('city_id_seq'); - zwraca liczbę typu integer

a więc wynik B. > wyniku A. Wygląda na to, że wszystko jest w porządku, ale nie jestem pewien. O co może chodzić? Siedzę nad tym importem cały dzień. Czy problem może leżeć w tym, że max(id) z tabeli 'city' jest puste?

Będę wdzięczny za pomoc.]]></description>
			<author><![CDATA[dummy@example.com (filozof)]]></author>
			<pubDate>Sun, 09 Jun 2013 22:16:27 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4571#p4571</guid>
		</item>
	</channel>
</rss>
