Backup PostgreSQL


(northwest) #1

Witam,

kombinuje nad zrobieniem automatu do tworzenia kopi zapasowych bazy danych w PostgreSQL.

W necie wyczytałem że można z poziomu konsoli wywołać jakieś polecenie i zrobi się kopia automatycznie:

pg_dump -c -O -U postgres test -h localhost -p 5432 --disable-dollar-quoting -i > plik.sql

to polecenie zwraca mi błąd dostępu (Permission denided)

jak zostawie samo:

pg_dump -U postgres to polecenie działa (ale nie tworzy pliku z kopią bazy)...

w pgAdminie jak sprawdzam to właściccielem bazy jest postgres... czyli powinno działać..

wiecie może dlaczego??

Northwest


(system) #2

pg_dump -U postgres > plik.sql

Zadziała tak samo tylko że wynik trafi do pliku "plik.sql"


(northwest) #3

ten sam błąd -> odmowa dostępu :///


(system) #4

Więc nasuwa się jedyne wyjaśnienie tego zjawiska: masz już plik o nazwie plik.sql i jest to plik z atrybutami tylko do odczytu.


(northwest) #5

Takie polecenie:

pg_dump -U postgres -W - działa prawidłowo, jak podam hasło skrypt startuje

ale już takie coś: pg_dump -U postgres >baza.sql powoduję odmowę dostępu...

takiego pliku na 100% nie mam (to jest PostgreSQL na Windowsie). jakąkolwiek nazwę podam - zawsze jest błąd..:confused:


(system) #6
echo "TwojeHaslo" | pg_dump -U postgres -W > baza.sql

(Airborn) #7

a może problem istnieje gdzieś w przekazywaniu strumienia do pliku, czemu nie skorzystać w tym celu z odpowiednich opcji pg_dump

pg_dump -U postgres -O -f plik.sql -W nazwa_bazy

(system) #8

Bo kolega jak mniemam chcę pełny automat, czyli to powinno też zadziałać:

echo "TwojeHaslo" | pg_dump -U postgres -O -f plik.sql -W

(northwest) #9

Ta baza stoi na Windows Vista - czyli echo chyba nie zadziała...:confused:

pg_dump -U postgres -O -f plik.sql -W nazwa_bazy - to polecenie wyświetla monit o hasło, i po poprawnym wprowadzeniu hasła nic nie wyświetla, pliku znaleźć też nie mogę - ale błędu nie ma:)


(system) #10

Spróbuj w poleceniu podać pełną ścieżkę do pliku "plik.sql".


(northwest) #11

nic nie dało:(


(system) #12

Czy masz uprawnienie administratora? Sprawdź czy masz możliwość tworzenia plików w folderze którego ścieżkę próbowałeś podać. Np otwórz notatnik i zachowaj jako ...


(northwest) #13

faktycznie, nadałem nowe uprawnienia i teraz tworzy plik - ale nie zapisuje w nim danych z bazy danych :confused:

pg_dump -U username -d database > file.dmp

ale nie ma już błędu "dostęp zabroniony":slight_smile:


(Airborn) #14

nie przekazuj do pliku, korzystaj z przełącznika -f

pg_dump -U username -d database -f nazwa_pliku

(northwest) #15

pg_dump -U username -d database -f nazwa_pliku - w tej formie polecenie nie działa (program chce jako pierwszy argument "-f")

pg_dump -f ja.txt -U postgres -d test - znowu robi to samo co wcześniejsze polecenie, tzn. uruchamia się i "stoi".... z tym że nie tworzy pliku...:confused:


(system) #16

echo "haslo" | pg_dump -U username -d database -W > file.dmp

teraz zadziała bo nareszcie masz uprawnienia :smiley:


(northwest) #17

echo "moje_haslo" | pg_dump -W -U postgres -d moja_baza > file.dmp

po odpaleniu tego mam monit o hasło. Po podaniu hasła program sobie chodzi i nic nie robi - nawet błędu nie wywala...:expressionless:

Tworzy sie tylko pusty plik...


(Airborn) #18

prawdę powiedziawszy to przychodzi mi do głowy tylko to, że to wcale nie postgres jest właścicielem bazy, sprawdź to jeszcze raz.

P.S.

postgres zasadniczo nie powinien być właścicielem żadnej bazy użytkowej, dla bezpieczeństwa powinno się stworzyć nowego usera. możesz jeszcze spróbować stworzyć nowego usera, zmienić właściciela na nowego usera, i wtedy wykonać backup


(northwest) #19

zmieniłem - dalej jest tak samo:(


(system) #20

jeżeli działa poprawnie to:

pg_dump -W -U postgres -d moja_baza

to wytłumaczyć nie działanie tego:

pg_dump -W -U postgres -d moja_baza > file.dmp

można tylko tym ze nie masz uprawnień do stworzenia lub edycji file.dmp lub dajesz złe hasło

jeżeli polecenie:

echo "moje_haslo" | pg_dump -W -U postgres -d moja_baza > file.dmp

prosi o hasło, to hasło w echo podałeś niepoprawnie lub złe przepisałeś polecenie.