ďťż
 
Postgres i klucze (reindeksacja) ďťż
 
Postgres i klucze (reindeksacja)
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Postgres i klucze (reindeksacja)



Piotrek_20 - 07-08-2007 00:01
Postgres i klucze (reindeksacja)
  Uzywam pgAdmin do zarządzania postgresem 8.2
Dodając i usuwając rekordy z bazy zrobiło mi się tak ze pierwszy klucz
mam juz 8xxx i są niepokolei np. 8001, 8003
Czy jest jakis sposób zeby zrobić automatyczną reindeksacje i
wyczyścyc klucze tak zeby liczył od 0 i puste miejsca zmniejszył o
wartosc? czyli zeby było 8001, 8002





hubert depesz lubaczewski - 07-08-2007 00:01

  Dnia 06.08.2007 Piotrek_20 <anna_kotek@o2.pl> napisał/a:
> Uzywam pgAdmin do zarządzania postgresem 8.2
> Dodając i usuwając rekordy z bazy zrobiło mi się tak ze pierwszy klucz
> mam juz 8xxx i są niepokolei np. 8001, 8003
> Czy jest jakis sposób zeby zrobić automatyczną reindeksacje i
> wyczyścyc klucze tak zeby liczył od 0 i puste miejsca zmniejszył o
> wartosc? czyli zeby było 8001, 8002

sorry, ale może napisz jakoś precyzyjniej o co ci chodzi.
bo z jednej strony piszesz o zmianie wartości w tabeli a z drugiej o
reindeksacji - co ma się zasadniczo do tabeli nijak.
z drugiej - jeśli chodzi ci o renumerowanie od 0, to skąd się tam w
opisie wzięły liczby 8001 i 8002?

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)




Piotrek_20 - 07-08-2007 00:01

  O co mi chodzi.
Mam tabele a w niej rekordy z wartościami załóżmy 1,2,3,500,4050 itd.
Gdybym tylko wstawiał to byłyby pokolei, ale czasem rekord jest
usuwany a klucze są dostawiane, więc myślałem czy jest możliwośc tak
jak w systemie zdefragmentować dysk, uporzadkowania tych kluczy tak ze
puszczam porzadkowanie i baza wykrywa mi połączenia PK<->FK i poprawia
wszystko tak, że będę miał:
1,2,3,4,5 a nie 1,2,3,500,4050




hubert depesz lubaczewski - 07-08-2007 00:01

  Dnia 06.08.2007 Piotrek_20 <anna_kotek@o2.pl> napisał/a:
> jak w systemie zdefragmentować dysk, uporzadkowania tych kluczy tak ze
> puszczam porzadkowanie i baza wykrywa mi połączenia PK<->FK i poprawia
> wszystko tak, że będę miał:
> 1,2,3,4,5 a nie 1,2,3,500,4050

można zrobić takie coś update'em na tabeli, i jest to dosyć proste.
powstaje tylko pytanie - a w czym ci dziury przeszkadzają?

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)





::-::dysmorfofob::-:: - 07-08-2007 00:01

  > czy jest możliwośc
[ciach]
> uporzadkowania tych kluczy tak ze
> puszczam porzadkowanie i baza wykrywa mi połączenia PK<->FK i poprawia
> wszystko tak, że będę miał:
> 1,2,3,4,5 a nie 1,2,3,500,4050

_Pomijajac celowosc (lub jej brak) takich dzialan._

Zakladajac, ze tabela wyglada +/- tak:

CREATE TABLE tabela

(id serial PRIMARY KEY);

oraz, ze klucze obce w innych tabelach maja ustawione ON UPDATE CASCADE

Przenumerowac mozna pole 'id' np. tak:

CREATE OR REPLACE FUNCTION wywal_dziury()

RETURNS VOID AS $$

DECLARE

kursor refcursor;

licznik integer;

najwiekszy integer;

kolejny integer;

BEGIN

-- licznik:=0; jesli ma byc koniecznie od zera

licznik:=1;

SELECT INTO najwiekszy max(id) FROM tabela;

OPEN kursor FOR SELECT id FROM tabela ORDER BY id DESC;

LOOP

FETCH kursor INTO kolejny;

IF NOT FOUND THEN

EXIT;

END IF;

UPDATE tabela SET id = najwiekszy + licznik WHERE id = kolejny;

licznik:=licznik +1;

END LOOP;

CLOSE kursor;

UPDATE tabela SET id = id - najwiekszy;

END;

$$

LANGUAGE 'plpgsql';

Na koniec pozostaje jeszcze tylko zmienic currval sekwencji dla pola 'id',
aby uniknac powtorzen wartosci w kluczu glownym.

::f::
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?= postgresql - int/int postgresql Select count(*) czy raczej Select count(ID) [PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?= [postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?= [postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?= [PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?= Postgres - replikcja master-master Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL] Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • felgiuzywane.xlx.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com