Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SOLVED] serial
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
Blackhole
Sytuacja jest taka... Miałem w tablicy 7 rekordów. Talibca ma taką postać:
  1. CREATE TABLE biblia (
  2. id serial,
  3. ksiega int,
  4. rozdzial int,
  5. wod int,
  6. wdo int,
  7. tresc text,
  8. PRIMARY KEY (id)
  9. );
Zrobiłem sobie skrypt, który spisuje do SQL-a zawartość bazy. Jednak nie uwzględnia on tego, że pewne pola mogą być typu serial i przy uaktualnieniu bazy z tego pliku SQL zapisywane jest wszystko bezpośrednio poprzez odczytane wartości (serial jest wpisywany bezpośrednio pomijając mechanizmy bazy, które mogą - i chyba powinny - same go wpisywać).

Wydaje mi się, iz właśnie dlatego jest błąd, gdy próbuję dodać już rekord tak, jak powinno się go dodawać. Wnioskuję, że po uaktualnieniu bazy powyższym plikiem SQL, w bazie nie ma zapisanej ostatniej wartości sekwencji i dlatego wyskakuje mi błąd:
Cytat
Warning: pg_query(): Query failed: ERROR: duplicate key violates unique constraint "biblia_pkey" in /var/www/localhost/htdocs/www/admin.php on line 97

Jeśli to powyżej jest prawdą (co napisałem), to chciałbym zapytać, jak eksportuje się całą bazę tak, aby wszystkie mechanizmy bazy były zachowane :?:
SongoQ
Odnosnie seriala, to dziala to tak ze tworzone jest pole o typie int4, dodatkowo jest tworzona sekwencja i w tym polu jest jako wartosc domyslna wstawiane wywolanie sekwencji.
Stworz sobie tabelke, edytuj ja i zobaczysz jak to wyglada.
Blackhole
A jak się eksportuje całą bazę?
SongoQ
Jedna z metod to z lini polecen inna np mozesz z pgadmina. Zaznaczasz baze, wybierasz narzedzia i tam masz backup
Blackhole
Byłbym raczej skłonny skorzystać z linii poleceń, bo tylko na jednym serwerze PostgreSQL mam phppgadmin.
Przejrzałem pobieżnie komendy z psql'a i jakoś nie wiem, której można do tego wykorzystać. Nakierujesz mnie? A jak potem wrzucić tę kopię do innej bazy?
jach
Na co dzien taki ladny duecik dla zdalnego hosta z postgresem

DUMP

pg_dump -h host -p port -U user baza_dump>plik_dump -i

RESTORE

psql -h host -p port -U user -d nowa_baza<plik_dump


pisalem z glowy , za ewetualne pomylki przepraszam.Pgadmina uzywac do tych rzeczy nie polecam bo sie czlowiek przyzwyczaja smile.gif a pozniej robi sie restore 20 MB pliku , przegladarka sie ladnie wywali czy czas sie zostanie przekroczony i zong
Blackhole
Dzięki, jach smile.gif

---- edit ----
Nic to jednak nie pomogło z problemem tego seriala blink.gif
SongoQ
Ale seriala Ci nie zrzuci tylko sekwencje i pole typu int4.
Blackhole
Zauważyłem, że last_value w sekwencji wynosi 3, a powinno wynosić 7. Jak zmienić tę wartość? Przez
Kod
update biblia_id_seq ...
nie można. Przez
Kod
alter sequence ...
raczej też nie można, bo z opisu tej komendy tak wywnioskowałem.
Jak więc można :?:
SongoQ
  1. SELECT SETVAL('sekwencja', 666)
Jabol
  1. SELECT pg_catalog.SETVAL ('scheme.biblia_seq_id', 7, true);

a potem:
  1. INSERT
  2. INTO biblia (id, xxx) VALUES (pg_catalog.NEXTVAL('scheme.biblia_seq_id'), 'XXX');


//EDIT: kurcze, spóźniłem się ...
Blackhole
Wielkie dzięki biggrin.gif Teraz można wpisywać tak, jak się powinno to robić cool.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.