database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 5872 게시물 읽기
No. 5872
질문2개 : 8.0.1 을 W2K 에 설치시 한글관련 설정, DB백업
작성자
김이수(isukim)
작성일
2005-02-05 01:40ⓒ
2005-02-05 02:06ⓜ
조회수
3,961

지난번에 vacuumdb문제로 김상기님께 도움받아서 정말 고맙구요...

 

저는지금 WIN2K + VB + Access or MS-SQL 로 개발 및 운영중인데
DB를 PostgreSQL로 바꾸려고 VB소스를 거의 고쳐가고있는중입니다
앞으로 많은 가르침과 도움을 받아야 할 것 같습니다.
여기 저기 글을 읽어보니 전혀 제머리로는 ㅠ.ㅠ;

{질문1}----------------------------------------------------------
8.0.1 을 WIN2K 에 설치시 한글과 관련된 설정에 대해 질문이 있는데요...

설치시에,
LC_COLLATE : C
Encoding : SQL_ASCII
DB Create시에 unicode
로 하라고 하셨고,
이경우 varchar(2) 는 한글 한 글자이고,정렬에서 '햏' 이 '피' 보다 앞에 나온다 하셨는데

테스트결과
pgAdmin3 의 쿼리창에서 테스트 해보니
varchar(2)의 컬럼에 한글 2자가 들어가고,
order by 로 select 해보니 결과는 아래와 같습니다.

"04";"1호기"
"02";"2호기"
"03";"피"
"01";"햏"

또, psql의 오류 (아마 한글이 깨져서 보이는거를 말씀하시는거 같은데요)는
set encoding to uhc; 는
ERROR: unrecognized configuration parameter "encoding" 이렇게 나오구요

\encoding uhc 로 하니까 아무메세지는 안나오지만
select시 한글이 잘보이는 군요...

설치시에
LC_COLLATE : C
Encoding : euc_kr
DB Create시에 unicode
로 해봐도 위와 동일한 결과인거 같은데...
어떤 차이점이 있는지 궁금합니다.

성능에 어떤 차이가 있을까요?

★ 또하나 있네요

Access를 delimiters로 구분된 텍스트 파일(DB.backup)로 백업받고

>sql -U username -f DB.backup MyTable

실행하니

create database시 unicode로 만들면 한글에서 에러나서 복구가 안되고

euc-kr로 만들면 "몀"자 같이 이상하게쓴 한글에서만 에러가 나는군요

DB복구를 위해서 euc-kr로 할수도 없고 방법이 없을까요????

 

{질문2}----------------------------------------------------------
회사내에 DB서버(8.0.1)가 있고 IDC센터에도 동일한 DB서버(7.3.4 on Linux)가 있을경우
회사DB = IDC-DB 를 유지하는 좋은방법 없을까요?
지금 생각은
회사DB에 쿼리문을저장할 수 있는 테이블을 하나 만들고
쿼리실행함수에 INSERT INTO 쿼리저장테이블 VALUES(SEQ, 쿼리문); 으로해서
저장해두고
10~20분 간격으로 IDC-DB에 쿼리문을 실행하도록 하려고합니다.
더 좋은 방법을 가르쳐주시면 감사하겠습니다.

 

{사족}----------------------------------------------------------
제 클라이언트들은 대부분 영세 소기업이라
열악한 PC에 고기능을 요구하고 있거든요

이번에 DB를 변경하려는 이유도 Access에서 데이터가 많아져서 그런지
가끔 죽어버리는 경우도 발생하고,
키컬럼에 이상한 문자가 들어가는 경우도 있고해서
PostgreSQL로 옮기는 중입니다.

많은 가르침 바랍니다.

이 글에 대한 댓글이 총 3건 있습니다.

방금 DSN DB 관련 작업 끝내고 보니, 글이 올라왔네요.

설명절 연휴에도 정신이 없으신가봅니다.

 

set encoding 은요,

set client_encoding to uhc;

입니다.

 

pg_ascii 인코딩에서 확장완성형 글자의 정렬이 제대로 나온다면, 정말 반가운 소리네요. 근데, 그런 경우를 한번도 본적이 없어서...

아래 방법으로 한번 해보세요. 그럼에도 불구하고 제대로 보인다면,  제게도 알려주세요. 획기적인 소식인지라. :)

 

db encoding 에 대한 이야기를 참 많이도 했는데,

정리를 하면요.

 

-- mydb2 데이터베이스의 인코딩값을 보여줍니다.
mydb2=# show server_encoding;
 server_encoding
-----------------
 SQL_ASCII
(1건 있음)
작업시간: 1.585 ms

-- 두글자를 저장할 수 있는 테이블을 만듭니다 .
mydb2=# create table t (a varchar(2));
CREATE TABLE
작업시간: 74.121 ms

-- 자료를 입력합니다.
mydb2=# copy t from stdin;
한 줄에 한 레코드씩 데이터를 입력하고
자료입력이 끝나면 backslash 점 (\.) 마지막 줄 처음에 입력합니다.
>> 무
>> 궁
>> 화
>> 꽃
>> 이
>> 피
>> 었
>> 습
>> 니
>> 다
>> 햏
>> 몀
>> \.
작업시간: 33514.044 ms

-- 입력한 순서대로 봅니다.
mydb2=# select * from t;
 a
----
 무
 궁
 화
 꽃
 이
 피
 었
 습
 니
 다
 햏
 몀
(12건 있음)

작업시간: 2.104 ms

-- 정렬해서 봅니다.
mydb2=# select a,length(a) from t order by a;
 a  | length
----+--------
 몀 |      2
 궁 |      2
 꽃 |      2
 니 |      2
 다 |      2
 무 |      2
 습 |      2
 었 |      2
 이 |      2
 햏 |      2
 피 |      2
 화 |      2
(12건 있음)

작업시간: 3.254 ms
-- 윗 처럼 정렬에 문제가 있고, 글자 개수에도 문제가 있지요..

mydb2=# insert into t values ('안녕');
ERROR:  value too long for type character varying(2)

-- 이번에는 euc-kr 인코딩으로 데이터베이를 만들고 접속합니다.
mydb2=# create database mydb3 encoding 'euc-kr';
CREATE DATABASE
작업시간: 425.134 ms

mydb2=# \c mydb3
"mydb3" 데이터베이스로 접속했습니다.

mydb3=# show server_encoding;
 server_encoding
-----------------
 EUC_KR
(1건 있음)
작업시간: 2.364 ms


-- 윗 경우와 같이 똑같이 테이블을 만들고 자료를 입력합니다.
-- 이때 '햏', '몀' 같은 글자는 입력자체가 안되니 뺍니다

mydb3=# select a,length(a) from t order by a;
 a  | length
----+--------
 궁 |      1
 꽃 |      1
 니 |      1
 다 |      1
 무 |      1
 습 |      1
 었 |      1
 이 |      1
 피 |      1
 화 |      1
(10건 있음)
작업시간: 123.034 ms

-- 한글의 글자갯수를 제대로 처리하니 두글자를 넣습니다.
mydb3=# insert into t values ('안녕');
INSERT 603421 1
작업시간: 2.363 ms

-- 하지만 확장완성형 글자는 입력할 수 없습니다.
mydb3=# insert into t values ('햏');
ERROR:  invalid byte sequence for encoding "EUC_KR": 0xc164

-- 이렇기 때문에, utf-8 인코딩으로 만듭니다.
mydb=# \c mydb
"mydb" 데이터베이스로 접속했습니다.
mydb=# show server_encoding;
 server_encoding
-----------------
 UNICODE
(1건 있음)
작업시간: 2.036 ms
-- 한글 입력 문제 때문에 클라이언트측 인코딩을 바꿉니다
mydb=# \encoding uhc
mydb=# show client_encoding;
 client_encoding
-----------------
 uhc
(1건 있음)
작업시간: 1.622 ms

mydb=# select a, length(a) from t order by a;
 a  | length
----+--------
 궁 |      1
 꽃 |      1
 니 |      1
 다 |      1
 몀 |      1
 무 |      1
 습 |      1
 었 |      1
 이 |      1
 피 |      1
 햏 |      1
 화 |      1
(12건 있음)
작업시간: 86.397 ms

-- 위와 같이 모든 문제가 해결되었습니다.

 

access 에서 덤프 받은 파일을 unicode db에 넣는 방법은 그 덤프 받은 파일의 인코딩을 utf-8로 바꾸어서 사용하면 간단하게 풀릴 것 같네요. 권장하는 프로그램은 iconv 프로그램입니다. (인터넷에서 win32 용으로 쉽게 구하실 수 있을겝니다)

iconv -f cp949 -t utf-8 -o DB.backup.utf8 DB.backup

psql -f DB.backup.utf8 mydb

 

(질문2 이야기)

두 데이터베이스간 자료 동기화 문제는 리플리케이션 개념으로 푸는 것이 현재로써는 가장 합리적입니다.

이곳 게시판에서, 리플리케이션, 또는 replication 으로 검색해 보시면 몇가지 글이 나옵니다. 그것을 참조하시면 될듯.

 

(사족)

PostgreSQL 놈은 비교적 저사양 PC에서 무난히 돌릴만한 놈이 아닙니다. :(

특히 하드웨어가 저사양일 경우, 데이터가 많아졌을 경우, 쿼리가 깔끔하지 않으면, 꽤 버벅거리는 놈이 PostgreSQL 입니다. 이부분도 꼭 기억해 두셔야합니다.

 

 

김상기(ioseph)님이 2005-02-05 02:59에 작성한 댓글입니다.

늦은 시간에도 이렇게 답변을 잘해주시니 감사할 따름입니다.

말씀하신대로 psql에서 제가 해본 내용입니다

설치할때는 SQL_ASCII로 했는데 왜 UNICODE로 되었을까요??

----------------------------------------------------

DSI1=# show server_encoding;
 server_encoding
-----------------
 UNICODE
(1 row)

DSI1=# create table t (a varchar(2));
CREATE TABLE
DSI1=# copy t from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 무
>> 궁
>> 화
>> 꽃
>> 이
>> 피
>> 었
>> 습
>> 니
>> 다
>> 햏
>> 몀
>> \.
ERROR:  invalid byte sequence for encoding "UNICODE": 0xc3
CONTEXT:  COPY t, line 2, column a: "궁"
DSI1=# select * from t;
 a
---
(0 rows)

DSI1=# \encoding uhc;
DSI1=# copy t from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 무
>> 궁
>> 화
>> 꽃
>> 이
>> 피
>> 었
>> 습
>> 니
>> 다
>> 햏
>> 몀
>> \.
DSI1=# select * from t;
 a
----
 무
 궁
 화
 꽃
 이
 피
 었
 습
 니
 다
 햏
 몀
(12 rows)

DSI1=# select a, length(a) from t order by a;
 a  | length
----+--------
 궁 |      1
 꽃 |      1
 니 |      1
 다 |      1
 몀 |      1
 무 |      1
 습 |      1
 었 |      1
 이 |      1
 피 |      1
 햏 |      1
 화 |      1
(12 rows)
DSI1=# insert into t values ('안녕');
INSERT 81657 1
DSI1=# insert into t values('햏');
INSERT 81658 1

--------------------------------------------

오늘은 그만 자야겠네요.

암튼 답변 정말 많은 도움이 되었구요

내일 한번 다시 SQL_ASCII로 설치해보고

그래도 UNICODE로 보이면 어떻게 된 사연인지...

다시 한번 감사드립니다

 

김이수(isukim)님이 2005-02-05 03:25에 작성한 댓글입니다.
이 댓글은 2005-02-05 03:30에 마지막으로 수정되었습니다.

DB 동기화관련 리플리케이션툴 Slony를

찾아보았는데요

세상에 이런 툴도 있군요

그런데 W2K용은 아직 없는가 보군요...

김이수(isukim)님이 2005-02-05 03:59에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
58758.0.1 설치시의 인코딩과 설치후 DB Create후의 Server Encoding에 대하여 [2]
김이수
2005-02-05
3372
5874데이터베이스 복구에 대해 질문.. [1]
초짜
2005-02-05
2485
5873DSN DB 서버 바꾸면서,... [2]
김상기
2005-02-05
2516
5872질문2개 : 8.0.1 을 W2K 에 설치시 한글관련 설정, DB백업 [3]
김이수
2005-02-05
3961
5871PostgreSQL을 사용하는데요..IDLE문제....로.... [2]
이상석
2005-02-04
3012
5869PostgreSQL 백업/복구 방법 [3]
초짜
2005-02-04
10592
5867출력결과테이블 아래 [1][2][3]...[10] 어떻게 해야하져?? [1]
헬프미
2005-02-04
1992
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다