[SOLVED] Migracja z HSQL na PostgreSQL

Użytkowanie programu bazodanowego
panbaryla
Posty: 50
Rejestracja: pt sty 14, 2011 11:29 am

[SOLVED] Migracja z HSQL na PostgreSQL

Post autor: panbaryla »

Witam ponownie,

ponieważ moja baza musi mieć bardziej rozbudowaną obsługę dat tym samym postanowiłem przenieść się na postgresql. I od razu schodek, zwykłe przeniesienie tabel sposobem drag n drop lub copy and paste ;) nie przynosi żadnych rezultatów. Nie przenosi się ani struktura ani dane tabel. Czy istnieje jakiś sposób aby przerzucić tabele z danymi do bazy w postgresql?

Pozdrawiam
Libre Office, wersja: 7.3.5.2
Debian GNU/Linux 64 bit
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Migracja z HSQL na PostgreSQL

Post autor: Jan_J »

Poziom niski:
po rozpakowaniu unzip-em pliku odb w pliku database/script znajdziesz SQL-owe polecenia tworzące Twoje tabele i więzy oraz perspektywy. Dane są w pliku database/data, niestety binarnym. Możesz tabelę po tabeli przenosić przez Calca albo przez pliki CSV/TSV.

Poziom średni:
w oknie poleceń SQL wykonaj polecenie

Kod: Zaznacz cały

SCRIPT 'plik.sql'
Utworzy ono plik "plik.sql" z SQL-ową definicją Twojej bazy i wypełnieniem jej danymi za pomocą INSERT, bez grzebania się w bebechach formatów OpenDocument i HSQL. Po dostosowaniu szczegółów dialektu SQL do wymagań postgresa, łykniesz go np. dołączonym do postgresa psql-em albo pgadminem.

Poziom wysoki:
Drag & drop, Copy & paste... Chciałoby się. Ale tak nie umiem, obawiam się że się nie da.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
panbaryla
Posty: 50
Rejestracja: pt sty 14, 2011 11:29 am

Re: Migracja z HSQL na PostgreSQL

Post autor: panbaryla »

Udało się 2 metodą. Dzięki serdecznie :P
Pojawił się jednak nowy problem, nie można dodawać/edytować rekordów w tabelach. Tabele można edytować lecz nie można dokonać żadnych zmian... Relacje w base też nie działają..
Przypuszczam, że problem leży w kluczach i relacjach ale kompletnie nic nie przychodzi mi do głowy...

Chociaż, to jest chyba problem z base lub sterownikiem do niego bo nawet jak zrobię jakąś tabele nową to też nie mogę nic dodać/edytować :(

UPDATE!!!

Tak to była wina sterownika. Po zastosowaniu tego tutka http://www.postgresonline.com/journal/a ... reSQL.html wszystko gra!!! :D
Libre Office, wersja: 7.3.5.2
Debian GNU/Linux 64 bit
panbaryla
Posty: 50
Rejestracja: pt sty 14, 2011 11:29 am

Re: [SOLVED] Migracja z HSQL na PostgreSQL

Post autor: panbaryla »

Dziwna sprawa.

Kiedy odpalam formularz oparty o relację Klienci - Maszyna otrzymuję poniższy komunikat:


"Nie można załadować danych.
Stan SQL: 22023
Indeks kolumny jest poza zakresem: 1, liczba kolumn: 0.
Polecenie SQL prowadzące do tego błędu:
SELECT * FROM "public"."Maszyna" WHERE ( "NIP" = :link_from_NIP )"

O co biega?
Libre Office, wersja: 7.3.5.2
Debian GNU/Linux 64 bit
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [SOLVED] Migracja z HSQL na PostgreSQL

Post autor: Jan_J »

panbaryla pisze:O co biega?
O sterownik. Używasz zapewne jdbc.

Serwer nie dostaje poprawnego zapytania SQL z podstawionymi parametrami. Poszukaj w logach.

Nie wiem czy wszystkie wersje sterownika jdbc do postgresa generują ten błąd, ale trzeba liczyć, że tak. Trochę to dziwne, bo te same sterowniki użyte z innych klientów (np. z DbVisualizera) podstawiają parametry poprawnie. Więc chyba coś nie iskrzy na styku Base--jdbc.

Pamiętam, że kiedyś się już na ten problem natknąłem. Wtedy rozwiązałem go pisząc makra z zapytaniami zamiast korzystać z narzędzia Kwerendy.

Ale kiedy zmienisz typ połączenia z jdbc na Postgresql (sterownik sdbc dostarczany z LibreOffice), to będzie OK. Tylko że jako parametry połączenia musisz wpisać "host=serwer dbname=baza" zamiast url-a 'postgresql://serwer/baza". No i w starszych wersjach Base (np. OOo 3.3) trzeba będzie dokonfigurować połączenie.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
panbaryla
Posty: 50
Rejestracja: pt sty 14, 2011 11:29 am

Re: [SOLVED] Migracja z HSQL na PostgreSQL

Post autor: panbaryla »

Błąd zniknął ale nie da się wprowadzić danych nawet bezpośrednio do tabeli...
Libre Office, wersja: 7.3.5.2
Debian GNU/Linux 64 bit
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [SOLVED] Migracja z HSQL na PostgreSQL

Post autor: Jan_J »

SOA: u mnie działa.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
panbaryla
Posty: 50
Rejestracja: pt sty 14, 2011 11:29 am

Re: [SOLVED] Migracja z HSQL na PostgreSQL

Post autor: panbaryla »

Hmmmm... siedziałem przez Święta nad tym i nie znalazłem rozwiązania...

Korzystam z tego sterownika - http://www.openoffice.org/dba/drivers/p ... index.html pod LibreOffice 3.5.4.2.

Korzystasz z LL czu OO?
Libre Office, wersja: 7.3.5.2
Debian GNU/Linux 64 bit
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [SOLVED] Migracja z HSQL na PostgreSQL

Post autor: Jan_J »

Sprawdzałem na LO 3.5 i 3.6. Mam instalacje OOo 3.3, ale nie doposażałem jej w sterownik sdbc dla Postgresa.

Co to znaczy, że się “nie da” wpisać danych do tabeli? jakieś komunikaty? nie umiem odtworzyć błędu, więc pozostaje zgadywanie. Zajrzyj też do logów Postgresa; może coś wyjaśnią?
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
panbaryla
Posty: 50
Rejestracja: pt sty 14, 2011 11:29 am

Re: [SOLVED] Migracja z HSQL na PostgreSQL

Post autor: panbaryla »

Jan_J pisze:Sprawdzałem na LO 3.5 i 3.6. Mam instalacje OOo 3.3, ale nie doposażałem jej w sterownik sdbc dla Postgresa.

Co to znaczy, że się “nie da” wpisać danych do tabeli? jakieś komunikaty? nie umiem odtworzyć błędu, więc pozostaje zgadywanie. Zajrzyj też do logów Postgresa; może coś wyjaśnią?
"nie da" się czyli nie można dodać kolejnych rekordów ani edytować już istniejących, wygląda tak jak by były "zablokowane"...
...poniżej logi z Postgresa ale one raczej nic nie wyjasniają...

2013-01-03 11:49:07 CET LOG database system was shut down at 2013-01-03 09:40:55 CET
2013-01-03 11:49:07 CET LOG database system is ready to accept connections
2013-01-03 11:49:07 CET LOG autovacuum launcher started
2013-01-03 12:15:20 CET ERROR null value in column "NumerSeryjny" violates not-null constraint
2013-01-03 12:15:20 CET DETAIL Failing row contains (21, null, null, null, null).
2013-01-03 12:15:20 CET STATEMENT INSERT INTO "public"."Awaria" ( "id_awaria") VALUES ( $1)
2013-01-03 12:19:04 CET ERROR null value in column "NumerSeryjny" violates not-null constraint
2013-01-03 12:19:04 CET DETAIL Failing row contains (21, test, null, null, null).
2013-01-03 12:19:04 CET STATEMENT INSERT INTO public."Awaria"(id_awaria, typ_awarii) VALUES ('21'::integer, 'test'::text)
2013-01-03 12:21:32 CET ERROR syntax error at or near ":" at character 72
2013-01-03 12:21:32 CET STATEMENT SELECT * FROM "public"."maszyna" WHERE ( 0 = 1 ) AND ( ( "klient_id" = :link_from_id ) )
2013-01-03 12:21:37 CET ERROR syntax error at or near ":" at character 72
2013-01-03 12:21:37 CET STATEMENT SELECT * FROM "public"."maszyna" WHERE ( 0 = 1 ) AND ( ( "klient_id" = :link_from_id ) )
2013-01-03 12:21:38 CET ERROR syntax error at or near ":" at character 72
2013-01-03 12:21:38 CET STATEMENT SELECT * FROM "public"."maszyna" WHERE ( 0 = 1 ) AND ( ( "klient_id" = :link_from_id ) )
2013-01-03 12:21:39 CET ERROR syntax error at or near ":" at character 72
2013-01-03 12:21:39 CET STATEMENT SELECT * FROM "public"."maszyna" WHERE ( 0 = 1 ) AND ( ( "klient_id" = :link_from_id ) )
2013-01-03 12:21:39 CET ERROR syntax error at or near ":" at character 72
2013-01-03 12:21:39 CET STATEMENT SELECT * FROM "public"."maszyna" WHERE ( 0 = 1 ) AND ( ( "klient_id" = :link_from_id ) )
2013-01-03 12:22:17 CET ERROR syntax error at or near ":" at character 72
2013-01-03 12:22:17 CET STATEMENT SELECT * FROM "public"."maszyna" WHERE ( 0 = 1 ) AND ( ( "klient_id" = :link_from_id ) )
Libre Office, wersja: 7.3.5.2
Debian GNU/Linux 64 bit
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [SOLVED] Migracja z HSQL na PostgreSQL

Post autor: Jan_J »

panbaryla pisze: "nie da" się czyli nie można dodać kolejnych rekordów ani edytować już istniejących, wygląda tak jak by były "zablokowane"...
...poniżej logi z Postgresa ale one raczej nic nie wyjasniają...
Właśnie że one wyjaśnią najwięcej...

Jeden problem to pominięcie pola kluczowego w INSERT (trzeba zdefiniować typ serial, żeby się samo aktualizowało). Drugi, to coś ze składnią. Dodałbyś jeszcze tekst zapytania w postaci, w jakiej zapisany jest w definicji kwerendy w pliku odb, “wyprany” z wszelkich poufności. Trzeba dostroić go tak by współpracował z Postgresem. To jest możliwe.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
panbaryla
Posty: 50
Rejestracja: pt sty 14, 2011 11:29 am

Re: [SOLVED] Migracja z HSQL na PostgreSQL

Post autor: panbaryla »

Tak wygląda (wyczyszczony z danych) plik który zasysam przez pgAdmina

Kod: Zaznacz cały

DROP TABLE SERWIS;
DROP TABLE AWARIA;
DROP TABLE MASZYNA;
DROP TABLE KLIENT;
DROP SEQUENCE SEQ_KLIENT;
DROP SEQUENCE SEQ_MASZYNA;
DROP SEQUENCE SEQ_SERWIS;
DROP SEQUENCE SEQ_AWARIA;

CREATE SEQUENCE SEQ_KLIENT START 1 INCREMENT 1;
CREATE SEQUENCE SEQ_MASZYNA START 1 INCREMENT 1;
CREATE SEQUENCE SEQ_SERWIS START 1 INCREMENT 1;
CREATE SEQUENCE SEQ_AWARIA START 1 INCREMENT 1;


CREATE TABLE KLIENT(
	ID integer not null default nextval('SEQ_KLIENT') primary key,
	NIP char(10) not null,
	NAZWA character varying(500),
	TYP_ADRESU character varying(50),
	ULICA character varying(50),
	KOD_POCZTOWY character varying(50),
	MIASTO character varying(50),
	NUMER character varying(50),
	OPIS character varying(10485760)
);

CREATE TABLE MASZYNA(
	ID integer not null default nextval('SEQ_MASZYNA') primary key,
	KLIENT_ID integer references KLIENT(ID), 
	NUMER_SERYJNY char(10) not null,
	NIP char(10) not null,
	TYP_ADRES_MASZYNA character varying(50),
	ULICA character varying(50),
	KOD_POCZTOWY character varying(50),
	MIASTO character varying(50),
	NUMER character varying(50),
	OPIS character varying(10485760),
	TYP_MASZYNY character varying(50),
	DATA_MONTAZU DATE,
	DATA_DEMONTAZU DATE
);

CREATE TABLE SERWIS(
	ID integer not null default nextval('SEQ_SERWIS') primary key,
	MASZYNA_ID integer references MASZYNA(ID), 
	DATA_SERWISU DATE,
	NUMER_SERYJNY CHAR(6) NOT NULL,
	DATA_PLANOWANEGO DATE,
	CZYNNOSCI_SERWISOWE character varying(150),
	STATUS_MASZYNY character varying(50),
	DATA_PRZEGLADU DATE,
	DATA_PLANOWANEGO_PRZEGLAD DATE,
	CZYNNOSCI_PRZEGLAD character varying(50)
);

CREATE TABLE AWARIA(
	ID integer not null default nextval('SEQ_AWARIA') primary key,
	MASZYNA_ID integer references MASZYNA(ID),
	TYP_AWARII VARCHAR(50),
	DATA_ZGLOSZENIA DATE,
	NUMER_SERYJNY CHAR(6) NOT NULL
);

INSERT INTO KLIENT(NIP,NAZWA,TYP_ADRESU,ULICA,KOD_POCZTOWY,MIASTO,NUMER,OPIS) VALUES('xxxx','xxxxxxxxxxxxxx.','Ul.','Domaniewska','02-672','Warszawa','xx',NULL);
INSERT INTO MASZYNA(NUMER_SERYJNY,NIP,TYP_ADRES_MASZYNA,ULICA,KOD_POCZTOWY,MIASTO,NUMER,OPIS,TYP_MASZYNY,DATA_MONTAZU,DATA_DEMONTAZU) VALUES('xxxxxxx','xxxxxxxxx8','Ul.','Wspólna','00-519','Warszawa','25','IIIp','xxxxxxxxx','2011-05-05',NULL);
INSERT INTO AWARIA(TYP_AWARII,DATA_ZGLOSZENIA,NUMER_SERYJNY) VALUES('xxxxxxxxxxxxxxxe','2012-05-30','007760');


update Maszyna m2 set klient_id = ( 
	select k.id from maszyna m, klient k
	where m.nip = k.nip and m.id = m2.id
);

update SERWIS s2 set maszyna_id = ( 
	select m.id from SERWIS s, maszyna m
	where s.numer_seryjny = m.numer_seryjny and s.id = s2.id
);

update Awaria a2 set maszyna_id = ( 
	select m.id from awaria a, maszyna m
	where a.numer_seryjny = m.numer_seryjny and a.id = a2.id
);

ALTER TABLE Maszyna DROP COLUMN nip;
ALTER TABLE Serwis DROP COLUMN numer_seryjny;
ALTER TABLE Awaria DROP COLUMN numer_seryjny;

ALTER TABLE Maszyna ALTER COLUMN klient_id SET NOT NULL;
ALTER TABLE Serwis ALTER COLUMN maszyna_id SET NOT NULL;
ALTER TABLE Awaria ALTER COLUMN maszyna_id SET NOT NULL;
Ostatnio zmieniony ndz sty 06, 2013 5:33 pm przez Jan_J, łącznie zmieniany 1 raz.
Powód: [quote] -> [code], aby bezboleśnie kopiować
Libre Office, wersja: 7.3.5.2
Debian GNU/Linux 64 bit
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [SOLVED] Migracja z HSQL na PostgreSQL

Post autor: Jan_J »

W Twoim skrypcie z ostatniego postu modyfikacja tabel się nie udaje.
Jest tak dlatego, że podałeś niespójne wartości w przykładowych INSERT-ach.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
panbaryla
Posty: 50
Rejestracja: pt sty 14, 2011 11:29 am

Re: [SOLVED] Migracja z HSQL na PostgreSQL

Post autor: panbaryla »

Problem leży po stronie dogrywanego sterownika lub starszej wersji LO. Odpaliłem wszystko na innym kompie z najnowszym LO (bo na Ubu 10.04 nie mogę nie wiedzieć czemu zainstalować najnowszej wersji) i wszystko chodzi jak burza...

Dziękuję za pomoc!
Libre Office, wersja: 7.3.5.2
Debian GNU/Linux 64 bit
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [SOLVED] Migracja z HSQL na PostgreSQL

Post autor: Jan_J »

no to s.o.l.v.e.d. Trudno o lepszą bazę w świecie foss.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
panbaryla
Posty: 50
Rejestracja: pt sty 14, 2011 11:29 am

Re: [SOLVED] Migracja z HSQL na PostgreSQL

Post autor: panbaryla »

Jan_J pisze:Trudno o lepszą bazę w świecie foss.
Co racja to racja :P
Libre Office, wersja: 7.3.5.2
Debian GNU/Linux 64 bit
ODPOWIEDZ