<?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 on the primary key]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=1853&amp;type=atom"/>
	<updated>2013-06-11T08:50:36Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=1853</id>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4585#p4585"/>
			<content type="html"><![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]]]></content>
			<author>
				<name><![CDATA[filozof]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1593</uri>
			</author>
			<updated>2013-06-11T08:50:36Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4585#p4585</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4584#p4584"/>
			<content type="html"><![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)]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2013-06-11T06:44:03Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4584#p4584</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4583#p4583"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[filozof]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1593</uri>
			</author>
			<updated>2013-06-10T22:50:00Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4583#p4583</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4582#p4582"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2013-06-10T13:38:22Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4582#p4582</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4581#p4581"/>
			<content type="html"><![CDATA[@c_michal, sorry, przeoczyłem twój post. A szkoda, po pomógł :) Dzięki!]]></content>
			<author>
				<name><![CDATA[filozof]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1593</uri>
			</author>
			<updated>2013-06-10T12:24:07Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4581#p4581</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4580#p4580"/>
			<content type="html"><![CDATA[OK, dam znać, jak znajdę rozwiązanie.]]></content>
			<author>
				<name><![CDATA[filozof]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1593</uri>
			</author>
			<updated>2013-06-10T11:31:05Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4580#p4580</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4579#p4579"/>
			<content type="html"><![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.]]></content>
			<author>
				<name><![CDATA[depesz]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1564</uri>
			</author>
			<updated>2013-06-10T11:29:09Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4579#p4579</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4578#p4578"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2013-06-10T11:29:06Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4578#p4578</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4577#p4577"/>
			<content type="html"><![CDATA[Otóż to, to bez sensu. Potrzebuje więc UNIQUE na dodatkowych 2 kolumnach, zgadza się?]]></content>
			<author>
				<name><![CDATA[filozof]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1593</uri>
			</author>
			<updated>2013-06-10T11:27:16Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4577#p4577</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4576#p4576"/>
			<content type="html"><![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.]]></content>
			<author>
				<name><![CDATA[depesz]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1564</uri>
			</author>
			<updated>2013-06-10T11:24:26Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4576#p4576</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4575#p4575"/>
			<content type="html"><![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;]]></content>
			<author>
				<name><![CDATA[filozof]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1593</uri>
			</author>
			<updated>2013-06-10T11:07:23Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4575#p4575</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4574#p4574"/>
			<content type="html"><![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.]]></content>
			<author>
				<name><![CDATA[depesz]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1564</uri>
			</author>
			<updated>2013-06-10T10:43:29Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4574#p4574</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4573#p4573"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2013-06-10T10:27:36Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4573#p4573</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[duplicate key violates unique constraint on the primary key]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4571#p4571"/>
			<content type="html"><![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.]]></content>
			<author>
				<name><![CDATA[filozof]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1593</uri>
			</author>
			<updated>2013-06-09T22:16:27Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4571#p4571</id>
		</entry>
</feed>
