PostgreSQL i dziwny problem
mr-owl - 06-03-2007 00:02
PostgreSQL i dziwny problem
Witam,
Mam tabelę:
CREATE TABLE item ( item_id SERIAL PRIMARY KEY , item_isbn char(10) NOT NULL ,... , item_country char(2) NOT NULL .... ) WITHOUT OIDS;
I teraz gdy robię dla niej (aktualizacja tylko jednego wiersza):
UPDATE item SET item_country='UK' WHERE item_country='UK' AND item_id=1454025;
Dostaję taki komunikat:
ERROR: duplicate key violates unique constraint "item_pkey" SQL state: 23505
Jest to o tyle dziwne że tyczy się to tylko i wyłącznie tego rekordu, wszystkie inne rekordy aktualizują się bez najmniejszego problemu. Co może być tego przyczyną? Coś ze sprzętem?
Pozdrawiam,
mr-owl
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Herakles - 06-03-2007 00:02
mr-owl wrote:
> Witam, > > Mam tabelę: > > CREATE TABLE item > ( item_id SERIAL PRIMARY KEY > , item_isbn char(10) NOT NULL > ,... > , item_country char(2) NOT NULL > ... > ) WITHOUT OIDS; > > I teraz gdy robię dla niej (aktualizacja tylko jednego wiersza): > > UPDATE item SET item_country='UK' WHERE item_country='UK' AND > item_id=1454025; > > Dostaję taki komunikat: > > ERROR: duplicate key violates unique constraint "item_pkey" > SQL state: 23505
dziwne, zgłoś to.
Spróbuj pozatym: #createdb x2 #pg_dump twoja_baza|psql x2 #dropdb twoja_baza #echo "aletr database x2 rename to twoja_baza"|psql
i zobacz czy problem się powtarza.
mr-owl - 06-03-2007 00:03
> mr-owl wrote: > > > Witam, > > > > Mam tabelę: > > > > CREATE TABLE item > > ( item_id SERIAL PRIMARY KEY > > , item_isbn char(10) NOT NULL > > ,... > > , item_country char(2) NOT NULL > > ... > > ) WITHOUT OIDS; > > > > I teraz gdy robię dla niej (aktualizacja tylko jednego wiersza): > > > > UPDATE item SET item_country='UK' WHERE item_country='UK' AND > > item_id=1454025; > > > > Dostaję taki komunikat: > > > > ERROR: duplicate key violates unique constraint "item_pkey" > > SQL state: 23505 > > dziwne, zgłoś to. > > Spróbuj pozatym: > #createdb x2 > #pg_dump twoja_baza|psql x2 > #dropdb twoja_baza > #echo "aletr database x2 rename to twoja_baza"|psql > > i zobacz czy problem się powtarza.
Witam
Po wykonaniu tego mam:
SELECT * FROM item WHERE item_id=1454025; dostaję dwa wiersze a na bazie oryginalnej tylko jeden. Co teraz z tym zrobić?
Pozdrawiam,
mr-owl
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
=?ISO-8859-2?Q?Micha=B3_Zaborowski?= - 06-03-2007 00:03
Tak na oko - wygląda, że indeks się rozjechał. Proszę wykonać: VACUUM FULL item; Można też skasować indeks i postawić go na nowo. jak są skopane dane - wyłoży się z wyjątkiem...
-- Pozdrawiam, Michał Zaborowski (TeXXaS)
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 07-03-2007 00:05
Michał Zaborowski wrote: > Tak na oko - wygląda, że indeks się rozjechał. > Proszę wykonać: > VACUUM FULL item; > Można też skasować indeks i postawić go na nowo. > jak są skopane dane - wyłoży się z wyjątkiem...
Jak index winien, to lepiej REINDEX.
-- P.M.
Herakles - 07-03-2007 00:05
Michał Zaborowski wrote:
> Tak na oko - wygląda, że indeks się rozjechał. > Proszę wykonać: > VACUUM FULL item; > Można też skasować indeks i postawić go na nowo. > jak są skopane dane - wyłoży się z wyjątkiem... > Nie! Regułka primary key się rozjechała, jaka to wersja prostgresa? Proponuję usunąć dodatkowy rekord i zapomnieć o całej sprawie.
mr-owl - 07-03-2007 00:05
> Michał Zaborowski wrote: > > > Tak na oko - wygląda, że indeks się rozjechał. > > Proszę wykonać: > > * *VACUUM FULL item; > > Można też skasować indeks i postawić go na nowo. > > jak są skopane dane - wyłoży się z wyjątkiem... > > > Nie! Regułka primary key się rozjechała, jaka to wersja prostgresa? > Proponuję usunąć dodatkowy rekord i zapomnieć o całej sprawie. Zrobiłem tak: 1. wywaliłem wszystkie indeksy z tej tabeli 2. pełen backup 3. usunięcie bazy i restart serwera 4. założenie nowej bazy i odtworzenie bazy z backup-u, (po psql -d baza < full.dmp nie miała założonego Primary Key dla item) 5. wywaliłem błędny rekord i założyłem primary key od początku 6. założyłem od nowa indeksy
Czy powinienem jeszcze coś zrobić?
Baza danych w wersji 8.1.3
Pozdrawiam,
mr-owl 5. czy jeszcze powinienem o czymś pamiętać
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
=?ISO-8859-2?Q?Micha=B3_Zaborowski?= - 07-03-2007 00:05
Herakles napisał(a): > Michał Zaborowski wrote: > >> Tak na oko - wygląda, że indeks się rozjechał. >> Proszę wykonać: >> VACUUM FULL item; >> Można też skasować indeks i postawić go na nowo. >> jak są skopane dane - wyłoży się z wyjątkiem... >> > Nie! Regułka primary key się rozjechała, > Nie bardzo rozumiem co to takiego ta "reguła"... ;) Użycie 'primary key' oznacza dla postgresa - 'załóż unikalny indeks'. Proszę nie mnożyć pojęć, terminów i to w taki ostry sposób - potem pytający będzie szukał opisu rozjechania się tej "reguły" i pewnie nie znajdzie. Przejrzenie dokumentacji do indeksów pewnie naświetliłoby problem.
-- Pozdrawiam, Michał Zaborowski (TeXXaS)
hubert depesz lubaczewski - 07-03-2007 00:05
On 2007-03-06, mr-owl <aphroheadWYTNIJTO@poczta.onet.pl> wrote: > Czy powinienem jeszcze coś zrobić? > Baza danych w wersji 8.1.3
upgrade do najnowszego 8.1.x
> 5. czy jeszcze powinienem o czymś pamiętać
tak. problem z rozjechanym indeksem to zazwyczaj problem ze sprzętem. zaalokuj czas na diagnozowanie. memtest, testy dysku.
depesz
-- quicksil1er: "postgres is excellent, but like any DB it requires a highly paid DBA. here's my CV!" :) http://www.depesz.com/ - blog dla ciebie (i moje CV)
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
mysql i mysql-front, problem
String line; if (line=="cos"){...}....problem
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
[PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?=
postgresql - int/int
Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ]
[PGSQL] czy ktos mial problemy z initdb pgsql 8.1 ?
[MySQL] Problem z zapisem danych w bazie danych
Problem z mysql - can't connect to MySQL/nietypowo...
zanotowane.pldoc.pisz.plpdf.pisz.plmisida.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|