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.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.plwawa19wwa91.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 |
|