PostgreSQL 데이터베이스를 dump 명령등을 사용해서 파일로 저장하면 이전에 insert 해놓은 자료들을 찾아보기가 어렵습니다. 이런 경우는 DB의 이름을 변경해서 그대로 복사해 놓으면 자료를 찾아보기도 쉽고 작업하기도 편리 합니다.  

postgresqldatabase를 복사하기 위한 작업을 해보겠습니다.

 

먼저 알고 있는 명령어를 사용해서 작업을 시작해 봅니다.

 

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 TestDB    | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
 postgres  | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
 template0 | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

 

리스트에 나오는 TestDB를 다른 이름으로 복사하는 명령어는 아래와 같습니다.

 

CREATE DATABASE [new database] WITH TEMPLATE [old database] OWNER [owner];

 

TestDBTestDB2022라는 DB로 복사하려면

 

CREATE DATABASE TestDB2022 WITH TEMPLATE TestDB OWNER postgres;

 

이렇게 명령어를 입력하면 되겠네요.

 

 

postgres=# CREATE DATABASE TestDB2022 WITH TEMPLATE TestDB OWNER postgres;
오류:  "TestDB" 템플릿 데이터베이스 없음
postgres=#

 

그렇지만 대부분 오류가 발생하게 됩니다.

이유는 오류 내용과 같이 템플릿 데이터베이스가 아니기 때문 입니다.

 

postgres=# select datname, datistemplate from pg_database;
  datname  | datistemplate
-----------+---------------
 postgres  | f
 TestDB    | f
 template1 | t
 template0 | t
(4 rows)

 

TestDBdatistemplate 값이 f(false)입니다.

true로 변경을 합니다.

 

postgres=# ALTER DATABASE "TestDB" WITH IS_TEMPLATE = true;
ALTER DATABASE
postgres=#

 

이제 다시 TestDB를 복사해 봅니다.

 

postgres=# CREATE DATABASE "TestDB2022" WITH TEMPLATE "TestDB";
CREATE DATABASE
postgres=# \l
                                  List of databases
    Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
------------+----------+----------+-------------+-------------+-----------------------
 TestDB     | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
 TestDB2022 | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
 postgres   | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
 template0  | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres          +
            |          |          |             |             | postgres=CTc/postgres
 template1  | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres          +
            |          |          |             |             | postgres=CTc/postgres
(5 rows)

 

 

복사가 잘 진행 되었습니다.

명령문에 CREATE DATABASE "TestDB2022" WITH TEMPLATE "TestDB";

쌍따옴표를 붙인 이유는 대소문자에 따라 Database 이름을 찾지 못하는 경우가 있습니다.

 

ALTER DATABASE "TestDB" WITH IS_TEMPLATE = false;

 

복사가 완료되면 기존 데이터베이스는 다시 templatefalse로 변경해 놓으면 작업은 완료 됩니다.

 

- copy coding -

 

linux에서 postgresql을 사용하기 위해 psql 명령어를 사용하는데 접속이 되지 않고 아래처럼 오류가 발생하였습니다.

 

[postgres@500115801534 postgresql]$ psql
psql: could not connect to server: 그런 파일이나 디렉터리가 없습니다
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

 

 

이런 오류는 postgres를 실행하지 않아서 발생한다고 되어 있는데 명령어로 확인해 보면

 

$ ps -ef | grep postgres

 

 

프로세스가 잘 실행되고 있습니다.

 

다음으로는 .s.PGSQL.5432 파일이 없어서 그렇다고 하는데 오류에 나와있는 폴더를 찾아가서 확인해 봅니다.

 

$ cd /var/run/postgresql/

$ ls -al

srwxrwxrwx.  1 postgres postgres   0  5 25 16:32 .s.PGSQL.5532

 

파일도 있습니다그렇지만 파일명이 좀 다른것을 확인할 수 있습니다.

 

저의 경우는 postgresqlport 번호를 변경해서 서비스를 하려고 하는 경우 이므로 위에서 시도한 방법으로는 해결이 될 수 없고 옵션을 사용해야 하는 경우 입니다.

 

$ psql -U postgres -p 5532

 

이렇게 psql을 실행할 때 옵션을 추가하면 데이터베이스에 접속이 가능 합니다.

 

여기서 비밀 번호를 요청하는데 postgres의 비밀번호를 입력하면 됩니다.

 

- copy coding -

 

전에 PostgreSQL을 설치하면서 PostGIS도 같이 설치를 하였는데 이번에는 PostgreSQLDatabase를 생성하여 PostGIS를 이용해 shp(shapefile)를 업로드 하는 작업을 해봅니다.

 

설치관련 내용은 아래 링크를 참조 하세요.

Windows 10 Postgresql 13.2 과 PostGIS 3.1 설치

 

1. PostGISDB 생성

 

shp 파일 내용을 저장할 databasePostgreSQL에 생성하기 위해 윈도우 시작 버튼을 클릭 하고

 

 

pgAdmin 4를 선택 합니다.

 

pgAdmin 좌측의 Servers를 확장하여 GIS용 데이터 베이스를 하나 새로 생성을 해서 진행을 하도록 하겠습니다.

 

 

Databases에 마우스를 놓고 우클릭 하여 Create > Database... 를 선택 합니다.

 

 

 

 

Database 이름을 적당히 입력해 주고 [Save] 버튼을 클릭 합니다.

 

 

 

TestDB1 데이터베이스가 생성 되었습니다. 

새로 생성된 TestDB1을 선택한 상태에서 상단 아이콘에서 디스크 모양의 Query Tool 아이콘을 클릭 하면 쿼리 입력 창이 나타납니다.

 

 

 

쿼리 입력 창에서 선택된 데이터베이스에 확장 기능을 추가해 주어야 GIS 정보를 담을 수 있는 데이터베이스가 됩니다.

CREATE EXTENSION postgis;

명령어를 입력 하고 실행 버튼 또는 F5 키를 이용하여 쿼리를 실행해 줍니다.

 

postgis 기능 반영이 잘 되었는지는 다음 명령어를 입력해서 실행해 봅니다.

SELECT postgis_full_version();

 

 

 

쿼리 결과도 잘 나오고 좌측 Extensions에도 postgis가 추가 된 것을 확인 할 수 있습니다.

 

 

2. SHP 파일 업로드

 

 

shp 파일 업로드는 PostGIS를 통해서 PostgreSQL에 입력합니다.

 

 

 

시작 버튼에서 PostGIS를 확장하여

PostGIS Bundle 3 for PostgreSQL ... Shapefile... 을 클릭 합니다.

 

 

 

파일을 찾기 위하여 [Add File]을 클릭 합니다.

 

 

 

좌측과 상단에 있는 폴더 기능을 이용하여 SHP 파일이 위치한 곳을 찾아 선택 한 후 [Open] 버튼을 클릭하여 추가해 줍니다.

 

 

 

선택한 파일이 추가 되면 만약 파일에 한글이 들어있는 경우 [Options...] 버튼을 클릭 합니다.

 

 

 

여기에서 UTF-8EUC-KR로 변경해 주어야 한글이 입력 됩니다.

 

 

 

한글이 없다면 상단의 [View connection details...] 버튼을 클릭 합니다.

 

 

 

shp파일을 저장할 PostgreSQL에 접속하는 정보를 입력하는 창으로 Database와 기타 필요한 정보를 입력하고 [OK] 버튼을 클릭 합니다.

 

 

 

하단 Log Window에 연결이 성공 되었다고 나오는 군요.

 

이제 마지막 작업으로 [Import] 버튼을 클릭 합니다.

잠시 후 Log Window[Shapefile import completed.] 가 나오면 입력 성공입니다.

 

다시 PostgreSQL로 돌아가 DB에서 Table을 확장하면

 

 

 

테이블이 새로 생성이 되고 데이터가 추가 된 것을 확인 할 수 있습니다.

import시 오류가 발생 한다면 shp 파일이 위치한 폴더 명에 한글이 있거나 shp 파일 명에 한글이 있는 경우 오류가 발생 하니 꼭 영문으로 해야 하고 shp 파일 내부에 한글이 있다면 options에서 EUC-KR로 해주면 별 문제없이 import 할 수 있습니다.

 

- copy coding -

 

예전 Postgresql 버전을 변경하기 위해 윈도우 10에 설치해 보았습니다.  그냥 프로그램을 다운받아 설치하면 되는데 여러 번 설치를 해야 하는 상황이라 매번 검색을 하기 귀찮아 설치 매뉴얼을 만들었습니다.  어려운 부분은 없지만 그래도 보면서 작업 하면 시간이 단축되더군요.


PostgreSql 프로그램을 바로 다운로드 받으려면

www.enterprisedb.com/downloads/postgres-postgresql-downloads

에 접속하면 되고 


잠시 살펴보고 다운로드 하려면 아래 사이트에 접속합니다.

www.postgresql.org/download/

 

 

운영체제 별로 지원을 하므로 윈도우가 아닌 다른 운영체제용 프로그램을 고르면 되는데 여기서는 Windows 이미지를 선택 합니다.

 

 

 

설명 상단에 있는 [Download the installer]를 클릭 하면 실제 다운로드 페이지로 이동 합니다.

www.enterprisedb.com/downloads/postgres-postgresql-downloads

 

 

 

여기서 실제 운영체제 별로 지원하는 버전을 확인 하고 다운로드 합니다.

postgresql-13.2-1-windows-x64.exe

다운로드 받은 프로그램을 실행해서 설치를 진행하기만 하면 끝 입니다.

 

 

 

 

 

설치 위치를 굳이 변경해야 한다면 수정 합니다.

 

 

 

 

 

이건 데이터를 어디에 보관하는가 결정을 하는 부분인데 저는 기본 폴더가 아닌 D:\에 폴더를 생성해서 프로그램과는 별도로 설정을 했습니다. 

 

 

 

나중에 pgAdmin 프로그램으로 DB에 접속할 때 사용하는 관리자 계정 비밀번호로 잘 기억해 둡니다.

 

 

 

보안을 위해 Port를 달리 사용한다면 변경해 줍니다.

 

 

 

 

 

지금까지 설정한 내용을 확인하고 변경이 필요하면 [Back] 버튼으로 돌아가 수정하면 됩니다.

 

 

 

이제 설치 준비가 되었군요.  설치를 진행 합니다.

 

 

 

 

 

PostGIS등의 추가기능을 설치합니다.  PoatgreSQL만 필요하다면 여기서 종료하면 됩니다.

 

 

 

 

PostgreSQL 13.2가 이미 설치되어 있는데 다른 버전이 필요하다면 선택합니다. 아니면 아래로 이동해서

 

 

 

추가로 설치 하려는 PostGIS 3.1을 선택 하고 그외에도 필요한 확장 프로그램이 있으면 선택해 줍니다.

 

 

 

선택한 프로그램을 다운로드 받을 폴더로 만약 자동 설치가 안되면 찾아가서 설치를 진행하면 됩니다.

 

 

 

여기서 가끔 락이 걸리는 경우가 있는데(위의 그림처럼 응답 없음) 잠시 기다리거나 [Back]으로 돌아 같다가 다시 진행하거나 하면 다운로드가 진행 됩니다.  아마 다운로드 받기 위한 접속에 시간이 걸리는 것 같습니다.

 

 

 

추가로 선택한 프로그램을 다운로드 받습니다.

 

 

 

추가로 선택한 프로그램 설치가 진행 합니다.

 

 

 

 

 

 

 

설치 위치는 PostgreSQL과 동일한 위치에 하도록 하고

 

 

 

 

중간에 나오는 창에서는 모두 [예]를 클릭 합니다.

 

 

 

 

 

 

 

 

 

 

여기까지 PostGIS 설치가 완료 되었습니다.

이제 설치된 프로그램을 확인해 봅니다.

 

 

 

pgAdmkin 4를 선택해서 DB도 확인합니다.  프로그램을 브라우저에서 작동 합니다.

 

 

 

설치할 때 입력한 비밀번호를 이용하여 로그인 합니다.

 

 

 

PostgreSQL 접속용 비밀번호를 입력 합니다.  저는 둘다 동일하게 했습니다.

 

 

 

좌측에 DB 정보가 있고 우측에 부가 정보를 확인할 수 있습니다.
좌측에서 신규 데이터베이스를 생성하고 사용하면 됩니다.

 

- copy coding -


123

+ Recent posts