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 설명서 를 읽는 것이 좋습니다 .
답변
위의 모든 대답에도 불구하고 여기 5 센트가갑니다.
모든 OS 및 모든 postgres 버전에서 작동합니다.
- 실행중인 postgres 인스턴스를 중지하십시오.
- 새 버전을 설치하고 시작하십시오. 새 버전에도 연결할 수 있는지 확인하십시오.
- 이전 버전의 변경
postgresql.conf
->port
에서5432
에5433
; - 이전 버전의 postgres 인스턴스를 시작하십시오.
- 터미널과
cd
새 버전bin
폴더 를 엽니 다 . - 운영
pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
- 이전 postgres 실행 인스턴스를 중지하십시오.
답변
우분투 사용자를 위한 솔루션은 다음과 같습니다.
먼저 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
답변
homebrew 및 homebrew 서비스를 사용하는 경우 다음을 수행 할 수 있습니다.
brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql
고급 postgres 기능을 사용하는 경우 이것이 완벽하게 작동하지 않을 수도 있지만 완벽하게 작동했습니다.
답변
사용자 설명서는 깊이에서이 주제를 다룹니다. 당신은 할 수 있습니다 :
-
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