Ruby on Rails 애플리케이션 (Mac OS X 10.9)에 PostgreSQL 데이터베이스를 사용하고 있습니다.
PostgreSQL 데이터베이스를 업그레이드하는 방법에 대한 자세한 지침이 있습니까?
데이터베이스의 데이터를 파괴하거나 엉망으로 만들 것 같습니다.
Ruby on Rails 애플리케이션 (Mac OS X 10.9)에 PostgreSQL 데이터베이스를 사용하고 있습니다.
PostgreSQL 데이터베이스를 업그레이드하는 방법에 대한 자세한 지침이 있습니까?
데이터베이스의 데이터를 파괴하거나 엉망으로 만들 것 같습니다.
답변:
자가 추출을 사용하여 Postgres를 설치 및 업그레이드했다고 가정하면 다음 단계를 수행 할 수 있습니다.
현재 Postgres 서버를 중지하십시오.
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
새 10.1 데이터베이스를 초기화하십시오.
initdb /usr/local/var/postgres10.1 -E utf8
실행 pg_upgrade
(참고 : 아래 이외의 버전에서 업그레이드하는 경우 bin 버전 변경) :
pg_upgrade -v \
-d /usr/local/var/postgres \
-D /usr/local/var/postgres10.1 \
-b /usr/local/Cellar/postgresql/9.6.5/bin/ \
-B /usr/local/Cellar/postgresql/10.1/bin/
-v
자세한 내부 로깅을 활성화하려면
-d
이전 데이터베이스 클러스터 구성 디렉토리
-D
새로운 데이터베이스 클러스터 구성 디렉토리
-b
이전 PostgreSQL 실행 파일 디렉토리
-B
새로운 PostgreSQL 실행 파일 디렉토리
새 데이터를 제자리로 이동 :
cd /usr/local/var
mv postgres postgres9.6
mv postgres10.1 postgres
Postgres를 다시 시작하십시오.
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
/usr/local/var/postgres/server.log
세부 사항을 점검 하고 새 서버가 올바르게 시작되었는지 확인하십시오.
마지막으로 레일 pg
젬을 다시 설치하십시오.
gem uninstall pg
gem install pg
좌절을 최소화하기 위해 위의 단계에서 수행하는 작업을 정확하게 이해 하려면 PostgreSQL 설명서 를 읽는 것이 좋습니다 .
initdb /usr/local/var/postgres9.4 -E utf8 --lc-collate=C --lc-ctype=utf-8 --lc-monetary=C --lc-numeric=C
delete_old_cluster.sh
명령에 주의하십시오 . 이 명령을 실행하는 것보다 먼저 /usr/local/postgres9.3 디렉토리를 수동으로 삭제했으며 전체 / usr / local / var / postgres 디렉토리를 잃어버린 것 같습니다 (Time Machine에서 복원 할 수 있음)
gem uninstall pg
다음 번 들러를 실행하여 Gemfile.lock에서 올바른 버전을 다시 설치하도록합니다 bundle
.
brew
이제 사용할 수있는 옵션이 brew services stop postgresql
하고 brew services start postgresql
대신 직접 호출하는 launchctl unload
과 launchctl load
.
위의 모든 대답에도 불구하고 여기 5 센트가갑니다.
모든 OS 및 모든 postgres 버전에서 작동합니다.
postgresql.conf
-> port
에서 5432
에 5433
;cd
새 버전 bin
폴더 를 엽니 다 .pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
postgresql.conf
또는 pg_hba.conf
)을 변경 한 경우 새 설치에서 해당 변경 사항을 수동으로 복제해야한다는 것입니다. 대신을 사용 pg_upgradecluster
하면 구성 파일이 새 클러스터로 복사됩니다. manpages.ubuntu.com/manpages/precise/man8/…
pg_dumpall: could not connect to database "XXX": fe_sendauth: no password supplied
Current releases of the dump programs can read data from any server version back to 7.0.
우분투 사용자를 위한 솔루션은 다음과 같습니다.
먼저 postgresql을 중지해야합니다
sudo /etc/init.d/postgresql stop
/etc/apt/sources.list.d/pgdg.list라는 새 파일을 만들고 아래 행을 추가하십시오
deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main
아래 명령을 따르십시오
wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.4
sudo pg_dropcluster --stop 9.4 main
sudo /etc/init.d/postgresql start
이제 우리는 모든 것을 가지고 있습니다. 아래와 같이 업그레이드해야합니다.
sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main
그게 다야. 대부분 업그레이드 된 클러스터는 포트 번호 5433에서 실행됩니다. 아래 명령으로 확인하십시오.
sudo pg_lsclusters
업데이트 :이 프로세스는 9.5를 11.5 이상으로 업그레이드하는 과정과 동일합니다. 단순히 버전을 반영하도록 명령을 수정 9.6
하고 10
어디 9.6
는 IS 이전 버전과 10
는 IS 새로운 버전. "old"및 "new"디렉토리도 적절히 조정하십시오.
방금 Ubuntu에서 PostgreSQL 9.5를 9.6으로 업그레이드했으며 인식해야 할 OS / 패키지 관련 뉘앙스가 몇 가지 있으므로 결과를 공유한다고 생각했습니다.
( 데이터를 수동으로 덤프하고 복원하고 싶지 않았으므로 여기에있는 다른 답변 중 일부는 실행 가능하지 않았습니다.)
요컨대, 프로세스는 이전 버전 (예 : 9.5 및 9.6)과 함께 새 버전의 PostgreSQL을 설치 한 다음 https://www.postgresql.org/의pg_upgrade
일부에 설명 된 바이너리 를 실행하는 과정으로 구성됩니다. docs / 9.6 / static / pgupgrade.html .
유일한 "까다로운"측면은 pg_upgrade
인수에 대한 올바른 값을 전달하지 않거나 cd
명령을 실행하기 전에 올바른 사용자 또는 올바른 위치에 로그인하지 못하면 암호 오류 메시지가 발생할 수 있다는 것입니다.
우분투 (아마도 데비안)에서 "공식"저장소를 사용 deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
하고 기본 파일 시스템 경로 나 런타임 옵션을 변경하지 않은 경우 다음 절차를 수행해야합니다.
새 버전을 설치하십시오 ( 9.6
명시 적으로을 지정 함 ).
sudo apt install postgresql-9.6
설치가 완료되면 두 버전이 나란히 실행되지만 다른 포트에서 실행됩니다. 설치 결과는 아래에 언급되어 있지만 간과하기 쉽습니다.
Creating new cluster 9.6/main ...
config /etc/postgresql/9.6/main
data /var/lib/postgresql/9.6/main
locale en_US.UTF-8
socket /var/run/postgresql
port 5433
두 서버 인스턴스를 모두 중지하십시오 (동시에 둘 다 중지됨).
sudo systemctl stop postgresql
전용 PostgreSQL 시스템 사용자로 전환하십시오.
su postgres
그의 홈 디렉토리로 이동하십시오 (실패하면 오류가 발생 함).
cd ~
pg_upgrade
다음 입력이 필요 합니다 ( pg_upgrade --help
이것을 알려줍니다).
When you run pg_upgrade, you must provide the following information:
the data directory for the old cluster (-d DATADIR)
the data directory for the new cluster (-D DATADIR)
the "bin" directory for the old version (-b BINDIR)
the "bin" directory for the new version (-B BINDIR)
이러한 입력은 "긴 이름"으로 지정되어보다 쉽게 시각화 할 수 있습니다.
-b, --old-bindir=BINDIR old cluster executable directory
-B, --new-bindir=BINDIR new cluster executable directory
-d, --old-datadir=DATADIR old cluster data directory
-D, --new-datadir=DATADIR new cluster data directory
또한 --new-options
실패하면 다음과 같은 결과가 발생하므로 스위치를 통과해야합니다 .
connection to database failed: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/lib/postgresql/.s.PGSQL.50432"?
이 스위치가 없으면 기본 구성 옵션이 적용되어 잘못된 연결 옵션이 사용되어 소켓 오류가 발생하기 때문에 발생합니다.
새 PostgreSQL 버전 pg_upgrade
에서 명령을 실행하십시오 .
/usr/lib/postgresql/9.6/bin/pg_upgrade --old-bindir=/usr/lib/postgresql/9.5/bin --new-bindir=/usr/lib/postgresql/9.6/bin --old-datadir=/var/lib/postgresql/9.5/main --new-datadir=/var/lib/postgresql/9.6/main --old-options=-cconfig_file=/etc/postgresql/9.5/main/postgresql.conf --new-options=-cconfig_file=/etc/postgresql/9.6/main/postgresql.conf
전용 시스템 사용자 계정에서 로그 아웃하십시오.
exit
이제 업그레이드가 완료 되었지만 새 인스턴스가 포트에 바인드 5433
되므로 (표준 기본값은 5432
) 새 인스턴스를 "중단"하기 전에 테스트하려는 경우이 점을 명심하십시오.
서버를 정상적으로 시작하십시오 (이전 인스턴스와 새 인스턴스가 모두 시작됨).
systemctl start postgresql
새 버전을 기본값으로 설정하려면 효과적인 구성 파일 (예 :)을 편집 /etc/postgresql/9.6/main/postgresql.conf
하고 포트가 다음과 같이 정의되어 있는지 확인해야합니다.
port = 5432
이 작업을 수행 5433
하는 경우 서비스를 시작하기 전에 이전 버전의 포트 번호를 동시에 변경하거나 이전 버전을 제거하십시오 (실제 데이터베이스 내용이 제거 되지 는 않으므로 사용해야합니다).apt --purge remove postgresql-9.5
일이 그것에 대해 ) :
apt remove postgresql-9.5
위의 명령은 모든 인스턴스를 중지하므로 다음을 사용하여 마지막으로 새 인스턴스를 시작해야합니다.
systemctl start postgresql
마지막으로, pg_upgrade
좋은 조언 을 고려해야합니다 .
Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
./analyze_new_cluster.sh
Running this script will delete the old cluster's data files:
./delete_old_cluster.sh
sudo su postgres
하지 ~ 그래서 작동하지 않았다에서 / 개인 / tmp를 pg_upgrade를 실행, pg_upgrade 전에 신뢰에 모두 설치의있는 pg_hba.conf에있는 모든 방법을 변경 sudo mkdir /foobar
하여 chmod 777 /foobar
거기가 달렸다. 마지막으로 pg_upgrade 명령 :/Library/PostgreSQL/9.5/bin/pg_upgrade -b /Library/PostgreSQL/9.2/bin -B /Library/PostgreSQL/9.5/bin -d /Library/PostgreSQL/9.2/data -D /Library/PostgreSQL/9.5/data -o -cconfig_file=/Library/PostgreSQL/9.2/data/postgresql.conf -O -cconfig_file=/Library/PostgreSQL/9.5/data/postgresql.conf
사용자 설명서는 깊이에서이 주제를 다룹니다. 당신은 할 수 있습니다 :
pg_upgrade
그 자리에서; 또는
pg_dump
그리고 pg_restore
.
의심스러운 경우 덤프로 처리하십시오. 오래된 데이터 디렉토리를 삭제하지 마십시오. 문제가 생길 경우를 대비하여 실수하십시오 / 실수합니다. 그렇게하면 변경되지 않은 9.3 설치로 돌아갈 수 있습니다.
자세한 내용은 설명서를 참조하십시오.
갇혀 있다면 어떻게 갇혀 있는지, 어디서, 무엇을 먼저 시도했는지 설명하는 자세한 질문을 게시하십시오. (다행히도) OS X 용 PostgreSQL의 여러 "분배"가 있기 때문에 PostgreSQL 설치 방법에 따라 다릅니다. 따라서 해당 정보를 제공해야합니다.
이 멍에를 뚫고 지나가는 다른 가난한 생물의 어깨에 서서, 나는 요세미티로 업그레이드 한 후 다음 단계를 따라 돌아와 달릴 수있었습니다.
자가 추출을 사용하여 Postgres를 설치 및 업그레이드했다고 가정하면 다음 단계를 수행 할 수 있습니다.
현재 Postgres 서버를 중지하십시오.
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
새 9.4 데이터베이스를 초기화하십시오.
initdb /usr/local/var/postgres9.4 -E utf8
postgres 9.3을 설치하십시오 (내 컴퓨터에 더 이상 존재하지 않기 때문에).
brew install homebrew/versions/postgresql93
Yosemite 업그레이드 중에 제거 된 디렉토리 추가 :
mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep
실행 pg_upgrade
:
pg_upgrade -v -d /usr/local/var/postgres -D /usr/local/var/postgres9.4 -b /usr/local/Cellar/postgresql93/9.3.5/bin/ -B /usr/local/Cellar/postgresql/9.4.0/bin/
새 데이터를 제자리로 이동 :
cd /usr/local/var
mv postgres postgres9.3
mv postgres9.4 postgres
Postgres를 다시 시작하십시오.
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
/usr/local/var/postgres/server.log
세부 사항을 점검 하고 새 서버가 올바르게 시작되었는지 확인하십시오.
마지막으로 관련 라이브러리를 다시 설치 하시겠습니까?
pip install --upgrade psycopg2
gem uninstall pg
gem install pg
brew cleanup
데이터를 마이그레이션하기 전에 실수로 실행되어 postgres9.3이 제거되었습니다. 도움이되었습니다. :)
이것은 나를 위해 그것을했다.
https://gist.github.com/dideler/60c9ce184198666e5ab4
짧고 요점. 나는 솔직히 PostgreSQL의 내장을 이해하는 것을 목표로하지 않으며 일을 끝내고 싶습니다.
jessie
. 10 개 이상의 DB와 ~ 400MB의 데이터베이스 데이터가 눈을 깜박 거렸다. 그런 다음 SSD에서 가상 데비안을 사용하고 있습니다.
pg_upgradecluster 9.4 main
오류가 발생했습니다. 오류 : specified cluster does not exist
...이 안내서와 함께 postgresql-9.4를 먼저 다시 설치해야합니다. wiki.postgresql.org/wiki/Apt#Quickstart
에 윈도우 내가 사용하려고 할 때 다른 오류 메시지에 직면 유지pg_upgrade
.
나를 위해 많은 시간을 절약했습니다.
내 솔루션은 다음 두 가지 리소스를 조합하여 사용하는 것입니다.
https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d
과
http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
두 번째 사람은 도움이 더 후 처음입니다. 또한 필요하지 않은 단계를 따르지 마십시오. 또한 postgres 콘솔을 통해 데이터를 백업 할 수없는 경우 대체 접근법을 사용하고 필자의 경우처럼 pgAdmin 3 또는 다른 프로그램으로 백업 할 수 있습니다.
또한 https://help.ubuntu.com/stable/serverguide/postgresql.html 링크 는 postgres 사용자 인증을 위해 암호화 된 비밀번호를 설정하고 md5를 설정하는 데 도움이되었습니다.
모든 작업이 끝나면 server
터미널에서 실행되는 postgres 버전 을 확인하십시오 .
sudo -u postgres psql postgres
postgres 터미널에서 비밀번호를 입력 한 후 :
SHOW SERVER_VERSION;
다음과 같이 출력됩니다.
server_version
----------------
9.4.5
postgres를 설정하고 시작하기 위해 다음 명령을 사용했습니다.
> sudo bash # root
> su postgres # postgres
> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop
그런 다음 파일에서 데이터베이스를 복원하려면 다음을 수행하십시오.
> psql -f /home/ubuntu_username/Backup_93.sql postgres
또는 작동하지 않으면 다음과 같이 시도하십시오.
> pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump
그리고 Rails를 사용하는 bundle exec rake db:migrate
경우 코드를 가져온 후 다음을 수행하십시오. :)
homebrew를 통한 Mac의 경우 :
brew tap petere/postgresql
,
brew install <formula>
(예 : brew install petere/postgresql/postgresql-9.6
)
오래된 Postgres를 제거하십시오.
brew unlink postgresql
brew link -f postgresql-9.6
오류가 발생하면 각 단계마다 추출 지침을 읽고 따르는 것을 잊지 마십시오.
자세한 내용은 https://github.com/petere/homebrew-postgresql을 참조하십시오.
npm을 사용한 이후 Windows 10에서 rimraf 패키지를 설치했습니다. npm install rimraf -g
명령을 사용하여 모든 데이터베이스를 하나씩 백업 pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
그런 다음 이번에는 포트 5433을 사용하라는 최신 PostgreSQL 버전, 즉 11.2를 설치했습니다.
그 뒤에는 이전 버전의 PostgreSQL 광산 제거가 10이었습니다. 제거 프로그램은 폴더를 삭제하지 않는다는 경고를 표시 할 수 있습니다 C:\PostgreSQL\10\data
. 따라서 rimraf를 사용하여 폴더와 하위 폴더를 영구적으로 삭제하는 다음 단계가 있습니다.
PostgreSQL 설치 디렉토리로 변경하고 명령을 실행하십시오 rimraf 10
. 10은 디렉토리 이름입니다. 이전 버전의 PostgreSQL 즉 9.5 이상을 사용하십시오.
이제 C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
Windows 환경 변수에 추가 하십시오. 내가 새로 설치 한 버전은 11이므로 참고하십시오 pg11
.
C:\PostgreSQL\data\pg11
다음으로 이동하여 postgresql.conf
편집 port = 5433
을 엽니 다.port = 5432
그게 다야. cmd를 열고 다음을 입력하십시오.psql -U postgres
이제 명령을 사용하여 모든 백업 된 데이터베이스를 하나씩 복원 할 수 있습니다 pg_restore -U $username --dbname=$databasename $filename
Windows 10에서 Postgresql 11에서 Postgresql 12로 업그레이드하는 솔루션은 다음과 같습니다.
첫 번째로 Postgresql 서비스를 중지하고 시작할 수 있어야합니다. Powershell에서 다음 명령으로이를 수행 할 수 있습니다.
스타트:
pg_ctl start -D “d:\postgresql\11\data”
중지:
pg_ctl stop -D “d:\postgresql\11\data”
상태:
pg_ctl status -D “d:\postgresql\11\data”
업그레이드하기 전에 백업하는 것이 좋습니다. Postgresql 11 인스턴스가 실행 중이어야합니다. 그런 다음 글로벌을 복사하려면
pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql
그런 다음 각 데이터베이스마다
pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc
또는
pg_dump -U postgres -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc
Postgresql 12를 아직 설치하지 않은 경우 (Postgresql 11도 설치되어 있으므로 포트 5433에 있음)
그런 다음 다음과 같이 업그레이드를 수행하십시오.
1) PostgreSQL 11 서비스 중지 (위 참조)
2) 편집 postgresql.conf
에서 파일 d:\postgresql\12\data
변경 port = 5433
에port = 5432
3) Windows 사용자 환경 경로를 편집 windows start
한 다음 (env
Postresql 11 대신 Postgresql 12를 가리 키도록
4) 다음 명령을 입력하여 업그레이드를 실행하십시오.
pg_upgrade `
-b “c:\program files\postgresql\11\bin” `
-B “c:\program files\postgresql\12\bin” `
-d “d:\postgresql\11\data” `
-D “d:\postgresql\12\data” --username=postgres
(Powershell에서 backtick (또는 backquote)`를 사용하여 다음 줄에서 명령을 계속하십시오)
5) 마지막으로 새로운 Postgresql 12 서비스를 시작하십시오
pg_ctl start -D “d:\postgresql\12\data”
귀하의 솔루션이 postgres를 9.6으로 업데이트하는 가장 좋은 링크라고 생각합니다
https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/