ďťż
 
Problem z PostgreSQL 8 ďťż
 
Problem z PostgreSQL 8
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

Problem z PostgreSQL 8



Melwin - 04-11-2005 23:17
Problem z PostgreSQL 8
  wykonuje zapytanie ALTER TABLE art ADD COLUMN robc1 numeric(9,2);

Trwa to w nieskonczonosc a tabela ma tylko okolo 100 rekordów. Do tego
serwer jest w tym momencie jakby zawieszony, wszystkie inne sesje sie
zatrzymuja. CO to moze byc?

--
Pozdrawiam
Melwin





Marcin Mańk - 04-11-2005 23:17

  > Trwa to w nieskonczonosc a tabela ma tylko okolo 100 rekordów. Do tego
> serwer jest w tym momencie jakby zawieszony, wszystkie inne sesje sie
> zatrzymuja. CO to moze byc?

Zapewne masz jakąś inną sesję podłączoną do bazy, która to sesja "blokuje"
alter table.

Nigdy dokładnie tego nie zdiagozowałem, ale działo mi się tak, gdy
próbowałem zmieniać strukturę tabeli w bazie, do której był podłączony
tomcat+hibernate.

Spróbuj odłączyć innych klientów od tej bazy.

Pozdrawiam
Marcin Mańk




Mikolaj Rydzewski - 04-11-2005 23:17

  Marcin Mańk wrote:
>>Trwa to w nieskonczonosc a tabela ma tylko okolo 100 rekordów. Do tego
>>serwer jest w tym momencie jakby zawieszony, wszystkie inne sesje sie
>>zatrzymuja. CO to moze byc?
>
>
> Zapewne masz jakąś inną sesję podłączoną do bazy, która to sesja "blokuje"
> alter table.
>
> Nigdy dokładnie tego nie zdiagozowałem, ale działo mi się tak, gdy
> próbowałem zmieniać strukturę tabeli w bazie, do której był podłączony
> tomcat+hibernate.

Aby tomcat z hibernatem nie blokowalo tabel nalezy po kazdym odwolaniu
sie do bazy zamykac sesje, tzn:

Session session = HibernateUtil.openSession();
Transaction transaction = session.beginTransaction();

try {
session.createQuery(....);
transaction.commit();
}
catch (...) {
transaction.rollback();
} finally {
session.close();
}

Wlasnie bez session.close() tabele sa blokowane.

--
Mikołaj Rydzewski




Grzegorz Szyszlo - 04-11-2005 23:17

  Melwin napisał(a):
> wykonuje zapytanie ALTER TABLE art ADD COLUMN robc1 numeric(9,2);
>
> Trwa to w nieskonczonosc a tabela ma tylko okolo 100 rekordów. Do tego
> serwer jest w tym momencie jakby zawieszony, wszystkie inne sesje sie
> zatrzymuja. CO to moze byc?

przy dodawaniu kolumny, nie jest fizycznie modyfikowana tresc wierszy,
wiec tabelka moze miec i 1mln wierszy. alter powinien sie wykonac
tak samo szybko.

tabelka nie moze byc uzywana jesli modyfikujesz jej strukture.

znik.





Grzegorz - 04-11-2005 23:17

  Grzegorz Szyszlo napisał(a):
> Melwin napisał(a):
>
>> wykonuje zapytanie ALTER TABLE art ADD COLUMN robc1 numeric(9,2);

> przy dodawaniu kolumny, nie jest fizycznie modyfikowana tresc wierszy,
> wiec tabelka moze miec i 1mln wierszy. alter powinien sie wykonac
> tak samo szybko.

Chyba, ze to bedzie:

ALTER TABLE art ADD COLUMN robc1 numeric(9,2) DEFAULT 0;

Ale tutaj jest tylko 100 rekordow i nie ma zadnej specjalnej wartosci
domyslnej.

Choc, z drugiej strony, wartosc null tez trzeba jakos zapisac dla pol w
juz istniejacych rekordach.

Wracajac do tematu.

Zapewne jak zobaczysz polaczenia do bazy i wykonywane aktualnie
zapytania to sytuacja sie wyjasni. Sprobuj czegos w rodzaju:

select current_query, query_start from pg_stat_activity;

--
Grzegorz




Grzegorz Szyszlo - 04-11-2005 23:17

  Grzegorz napisał(a):

>>> wykonuje zapytanie ALTER TABLE art ADD COLUMN robc1 numeric(9,2);
>
>> przy dodawaniu kolumny, nie jest fizycznie modyfikowana tresc wierszy,
>> wiec tabelka moze miec i 1mln wierszy. alter powinien sie wykonac
>> tak samo szybko.
>
> Chyba, ze to bedzie:
>
> ALTER TABLE art ADD COLUMN robc1 numeric(9,2) DEFAULT 0;

to jest tylko atrybut kolumny, dla nowo wprowadzanych wierszy.
jesteś pewien że tabela będzie przepisana? no chyba że dasz atrybut
NOT NULL, wtedy mogą być problemy.

> Ale tutaj jest tylko 100 rekordow i nie ma zadnej specjalnej wartosci
> domyslnej.
>
> Choc, z drugiej strony, wartosc null tez trzeba jakos zapisac dla pol w
> juz istniejacych rekordach.

myk w tym że nie trzeba :)

znik.




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 04-11-2005 23:18

  Grzegorz Szyszlo wrote:
> Grzegorz napisał(a):
>
>> Chyba, ze to bedzie:
>>
>> ALTER TABLE art ADD COLUMN robc1 numeric(9,2) DEFAULT 0;
>
> to jest tylko atrybut kolumny, dla nowo wprowadzanych wierszy.
> jesteś pewien że tabela będzie przepisana? no chyba że dasz atrybut
> NOT NULL, wtedy mogą być problemy.

Będzie - tu dodajesz kolumne, z domyślną wartościa, a nie zmieniasz sam atrybut.

Welcome to psql 8.0.3, the PostgreSQL interactive terminal.

madej=> create table test (a integer);
CREATE TABLE
madej=> insert INTO test VALUES (1) ;
INSERT 296757 1
madej=> select * from test;
a
---
1
(1 row)

madej=> alter TABLE test add b integer default 0;
ALTER TABLE
madej=> select * from test;
a | b
---+---
1 | 0
(1 row)

Działa w ten sposób chyba od 8.0.

--
P.M.




Grzegorz - 04-11-2005 23:18

  Paweł Matejski napisał(a):
> Grzegorz Szyszlo wrote:
>
>> Grzegorz napisał(a):
>>
> [...]
> Działa w ten sposób chyba od 8.0.

Dzieki za wyreczenie :).

Wydaje mi sie, ze w 7.x (7.4 ?) tez juz tak dzialal...

--
Grzegorz




Grzegorz Szyszlo - 11-11-2005 11:39

  Paweł Matejski napisał(a):

>> to jest tylko atrybut kolumny, dla nowo wprowadzanych wierszy.
>> jesteś pewien że tabela będzie przepisana? no chyba że dasz atrybut
>> NOT NULL, wtedy mogą być problemy.
>
>
> Będzie - tu dodajesz kolumne, z domyślną wartościa, a nie zmieniasz sam
> atrybut.
>
> Welcome to psql 8.0.3, the PostgreSQL interactive terminal.
>
> madej=> create table test (a integer);
> CREATE TABLE
> madej=> insert INTO test VALUES (1) ;
> INSERT 296757 1
> madej=> select * from test;
> a
> ---
> 1
> (1 row)
>
> madej=> alter TABLE test add b integer default 0;
> ALTER TABLE
> madej=> select * from test;
> a | b
> ---+---
> 1 | 0
> (1 row)
>
> Działa w ten sposób chyba od 8.0.

czyli musze robić na odwrót niż kiedyś. uech.
czyli bez default, a potem alter table aby dodać default.

wcześniej aby osiągnąć ten efekt to alter jak powyżej,
po czym update test set b=0 zeby sie przepisalo.
ale to juz przeszlosc. szkoda.

znik.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • wawa19wwa91.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com