<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=1203&amp;type=atom"/>
	<updated>2012-01-25T13:38:47Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=1203</id>
		<entry>
			<title type="html"><![CDATA[Odp: Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3381#p3381"/>
			<content type="html"><![CDATA[Już wiem na czym głównie polegał mój błąd. Sprawa tyczyła się ról i tego, której roli używałem przy odtwarzaniu archiwum. Wynikało to z faktu, iż właścicielem bazy danych, którą chciałem przepisać był inny użytkownik i tak jak przy tworzeniu dump'a nie było problemów tak przy odtwarzaniu trochę się zakręciłem. Utworzyłem role w Postgres'ie 9.1 jednak przy odtwarzaniu kiedy łączyłem się z inną bazą podawałem nie jej właściciela (jak powinienem w polu --username) tylko właściciela tworzonej bazy.

Strasznie dziękuję za pomoc, bo twoje uwagi naprowadziły mnie na poprawne rozwiązanie.

Co do dokumentacji to używałem głównie helpów, które wyświetlają się kiedy wpiszemy opcje --help przy poleceniach.

Edit:

 Gdyby ktoś miał podobne problemy, to podaje rozwiązanie, które wydaje mi się poprawne:
 - korzystając z pg_dump z wersji Postgres 9.1 (nie wiem czy ma to znaczenie, ale tego używałem), mając uruchomioną usługę Postgres 8.3, pozostałe jakie mam wyłączone wykonałem dumpa przy pomocy polecenia:

 pg_dump --format=plain --file=plik.sql --host=localhost --port=5440 --username=uzytkownik --password --create baza

gdzie użytkownik to nazwa roli właściciela zrzucanej bazy danych, host i port oczywiście do Postgres 8.3

 następnie wyłączyłem usługę Postgres 8.3, włączyłem 9.1 i wykonałem polecenie (również przy użyciu binarki z wersji 9.1)

 psql --file=plik.sql --host=localhost --port=5432 --username=postgres --password postgres
gdzie postgres jest nazwą roli właściciela bazy postrgres (przepraszam, że tak samo się nazywa rola i baza, ale to ustawienia domyślne), host i port oczywiście na wersję Postgres 9.1]]></content>
			<author>
				<name><![CDATA[Nissyre]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1345</uri>
			</author>
			<updated>2012-01-25T13:38:47Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3381#p3381</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3380#p3380"/>
			<content type="html"><![CDATA[[quote=Nissyre]W tym przypadku otrzymuję komunikat o błędzie krytycznym dotyczącym braku bazy danych nazwabazy - co już jest dziwne ze względu na to że pierwsze instrukcję w pliku zawierają jej utworzenie. Uznałem jednak, że może to tylko jakiś drobny błąd i utworzyłem bazę przy pomocy pgAdmina, jednak wtedy na przekór błąd mówił mi o tym, że baza już istnieje i nie można wykonać zapytania.[/quote]

Podczas przywracania (tworzenia) bazy via psql, ten z kolei potrzebuje nawiązać połączenie z [b]jakąś[/b] istniejąca bazą danych np, template1, postgres, a następnie dopiero z jej poziomu wykonać CREATE DATABASE NazwaBazy i dalsze polecenia (istniejące bazy możesz sprawdzić via psql -l albo \l wewnątrz, ew. zapytaniem Select datname From pg_database Order By datname;), ew. mozesz uzyć też opcji --clean w pg_dump. Piszesz o błędach składni, możesz wypisać co to z błędy ? Jeśli nie jest dużo i są względnie proste do poprawienia, to wystarczy poprawić sam zdumpowany plik SQL (oczywiście nie trzeba ręcznie), a następnie ponownie wczytać plik via wspomniany psql, a potem będziesz mógł już tworzyć backupy w formacie takim jaki chcesz (dla wersji 9.1).

[quote=Nissyre]Możliwe, że robię coś źle. Niestety nie znam nikogo kto by znał się na temacie, a sam wiem tyle co przeczytałem w internecie.[/quote]

Polecam zajrzeć do dokumentacji Postgres'a np. [url]http://www.postgresql.org/docs/8.3/static/app-pgdump.html[/url] tam jest wszystko co trzeba.]]></content>
			<author>
				<name><![CDATA[gszpetkowski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1223</uri>
			</author>
			<updated>2012-01-25T12:46:08Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3380#p3380</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3379#p3379"/>
			<content type="html"><![CDATA[Przetestowałem 2 metody:
1. Używając pgAdmina:
  - wykonałem kopię zapasową, format plain, dodatkowo zaznaczyłem opcję aby umieścić instrukcję CREATE DATABASE
  - przy próbie przywrócenia tak utworzonego archiwum, po wczytaniu pliku typ archiwum nie był rozpoznawany
2. Korzystając z pg_dump i psql 
 - uruchomiłem usługę Postgresql 8.3 (9.1 wyłączona)
 - użyłem pg_dump --format=plain --create --host=localhost --port=5440 --username=... --password --file=plik nazwabazy
 - podałem hasło i archiwum poprawnie się zapisało na dysku
 - zatrzymałem usługę Postgresql 8.3 i uruchomiłem 9.1
 - wywołałem psql --file=plik [połaczenie do bazy danych jak wyżej ze zmianą portu]
 W tym przypadku otrzymuję komunikat o błędzie krytycznym dotyczącym braku bazy danych nazwabazy - co już jest dziwne ze względu na to że pierwsze instrukcję w pliku zawierają jej utworzenie. Uznałem jednak, że może to tylko jakiś drobny błąd i utworzyłem bazę przy pomocy pgAdmina, jednak wtedy na przekór błąd mówił mi o tym, że baza już istnieje i nie można wykonać zapytania.

Edit:

 Wykonałem jeszcze 1 test, według schematu drugiego z tym, że nie korzystałem z opcji --create przy tworzeniu pliku, w zamian za to utworzyłem bazę w pgAdminie, ustawiłem jej odpowiedniego właściciela, następnie użyłem psql z dodatkową opcją --dbname=nazwabazy. Jednak wyrzucane są błędy składni przy każdym rekordzie danych. 

Możliwe, że robię coś źle. Niestety nie znam nikogo kto by znał się na temacie, a sam wiem tyle co przeczytałem w internecie.]]></content>
			<author>
				<name><![CDATA[Nissyre]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1345</uri>
			</author>
			<updated>2012-01-25T10:54:04Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3379#p3379</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3378#p3378"/>
			<content type="html"><![CDATA[Nie bardzo rozumiem o jakim archiwum piszesz, plain SQL (pg_dump -Fp) powinien wyprodukować zwykły plik tekstowy, przy czym pg_restore o ile mnie wiadomo tego nie obsłuży, natomiast można użyć psql'a żeby bezpośrednio wczytać SQL'a.]]></content>
			<author>
				<name><![CDATA[gszpetkowski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1223</uri>
			</author>
			<updated>2012-01-24T17:29:53Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3378#p3378</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3376#p3376"/>
			<content type="html"><![CDATA[Niestety po wytworzeniu archiwum z opcja plain Postgres 9.1 zachowuje się jakby nie rozpoznawał typu archiwum co wywołuje błąd.]]></content>
			<author>
				<name><![CDATA[Nissyre]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1345</uri>
			</author>
			<updated>2012-01-24T15:30:59Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3376#p3376</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3375#p3375"/>
			<content type="html"><![CDATA[Może spróbuj zrobić eksport/import z użyciem formatu SQL (pg_dump plain i psql -f), w razie błędów Postgres powinien wypisać co się nie zgadza.]]></content>
			<author>
				<name><![CDATA[gszpetkowski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1223</uri>
			</author>
			<updated>2012-01-24T14:24:14Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3375#p3375</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Przeniesienie baz danych z Postgres 8.3 na 9.1]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3373#p3373"/>
			<content type="html"><![CDATA[Witam wszystkich.
 Mój problem wygląda następująco:
 - współtworzony przeze mnie program korzystał przez długi czas z wersji PostgreSQL 8.3
 - podczas instalacji by użytkownik nieznający się na komputerach nie musiał zastanawiać się nad instalacją serwera bazy danych wykorzystywany był cichy instalator msi,
 - z powodu problemów instalacji PostgreSQL 8.3 np na Windows Server 2008, jak i braku wersji x64 PostgreSQL 8.3 postanowiłem zmienić używaną dotychczas wersję serwera na nowszą
 - niestety podczas poszukiwania informacji na temat przeniesienia danych z wersji 8.3 na 9.1 natknąłem się na informację 

"For Windows users, note that due to different integer datetimes settings used by the one-click installer and the MSI installer, it is only possible to upgrade from version 8.3 of the one-click distribution to version 8.4 or later of the one-click distribution. It is not possible to upgrade from the MSI installer to the one-click installer."

Źródło: [url]http://www.postgresql.org/docs/devel/static/pgupgrade.html[/url]

Próbowałem mimo tego przenieść bazy danych przy pomocy pg_dump oraz pg_restore (również testowałem wersję z opcją --inserts). Niestety bez powodzenia. Użycie pg_upgrade również kończy się niepowodzeniem ze względu na niezgodność 

"Also, the default datetime storage format changed to integer after PostgreSQL 8.3. pg_upgrade will check that the datetime storage format used by the old and new clusters match. Make sure your new cluster is built with the configure flag --disable-integer-datetimes."

Źródło: jw.

 Moje pytanie brzmi jak sobie z tym problemem poradzić? Jeśli dobrze rozumiem moim rozwiązaniem byłoby korzystanie z wersji PostgreSQL 9.1 budowanej z opcją --disable-integer-datetimes jednak nie wiem skąd w taką wersję mógłbym się zaopatrzyć. Może ktoś spotkał się z podobnym problemem i udało mu się go rozwiązać. Może jest jednak jakieś rozwiązanie, które pozwoli obejść wyżej wymienione problemy. Myślałem jeszcze nad eksportem bazy (schematu i danych) do XML'a i odtwarzaniu jej na podstawie tych danych, jednak wydaje mi się, że to rozwiązanie byłoby bardzo powolne.

Z góry dziękuje za wszelkie wskazówki.]]></content>
			<author>
				<name><![CDATA[Nissyre]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1345</uri>
			</author>
			<updated>2012-01-24T13:03:42Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3373#p3373</id>
		</entry>
</feed>
