1. Pg_hba.conf  파일에서 접속 허용  "host, DB, 사용자, 아이피(호스트), 접속형식"  등을 설정한다.


# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               trust
# export connection
host    Test      Test       192.168.6.195/32        password
host    Test      Test       192.168.6.195/32        password


=> 대략적인 뜻은 Test디비에 접근할 수 있는 것은 Test아이디로 192.168.6.195에서 접속한 것만 password를 입력 받고 허가해준다. 라는 뜻이다.




2. postgresql.con  파일 수정. --> 포트 및 host 설정.


#---------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#---------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'  # what IP interface(s) to listen on;
                                # defaults to localhost, '*' = any
port = 5432
max_connections = 100

 

=> 대략적인 설명은 5432포트로 들어오는 모든 요청에 응답하도록 설정하는 것이다.



% 유저를 추가하는 방법은 다음과 같다.

psql Test;

Test # > CREATE USER "Test" PASSWORD='qlqjs123';

=> 기본적으로 name에 해당하는 문자열은 대소문자를 구분해서 입력을 해도 모두 소문자로 인식한다.  대소문자를 가려서 입력하고 싶을때는 " (큰따옴표)로 묶어줘야만 한다.

ex) test , Test TEST ==> test

    "Test"  => Test

   "TEST" => TEST


1. 백업

 

pg_dump 와 pg_dumpall 프로그램을 이용해서 실행을 한다.

 

사용법)

  pg_dump [옵션] [해당디비이름] > 저장할 파일명 | 하나의 데이타베이스만 백업하고자 할때

  pg_dumpall [옵션] > 저장할 파일명                      | 전체 디비를 백업하고자 할때

 

주요옵션의 종류

-C(대문자): 데이타베이스의 생성부분까지 백업을 하라는 옵션

-a : 데이타만 백업 (copy to)

-d : 데이타만 백업 / 복구 (insert 쿼리로 덤프)

-s : 스키마만 백업 / 복구

 

==>

 

데이타만을 백업하고자 할때는

pg_dump -d test > test.dmp (작은단위 디비의 경우에만 사용)

pg_dump -a test > test.dmp

정도의 실행이면되고.

 

 

스키마만 백업해서 다른 컴퓨터에 같은 디비를 만들고자 할때는

pg_dump -Cs test > test_schema.sql

를 사용하면 된다.

 

 

보통 백업이라하면 만약에 경우 새로 생성하는 것을 대비하는 것이기 때문에 -C옵션은 필수이다

동일한 디비를 다른 머신에서 구축하고자 할때는 -s 옵션으로 그 뼈대만을 백업해서 작업하면

불필요한 데이타의 이동은 피할 수 있다.

 

cf .  pg_dump -s 로 만든 백업 파일엔 create 관련 sql이 빠져있고

       pg_dump -Cs 는 create가 들어 있다.  -Cs는 아무것도 없는 곳(database)에 복구할 목적으로

                     -s는 database가 존재하는 곳에 복구하기 위한 백업이다.

 

 

2. 복구

 

1) 스키마 복구 / 복원

 

복구는 여러가지 방식이 있지만 가장 쉬운 방식을 설명하겟다.

 

psql [아무디비이름/존재하는것] < test_schema.sql

 

(아마도 vim test_schema.sql 해본사람이면 알겠지만 dump의 내용은 sql 문으로 구성되어 있다.

 위와 같이 실행하면 그 sql을 순서대로 실행하는 것과 같은 역할을 한다.

 아무 디비에 대해서 실행을 해도 새로운 디비를 생성하고 만드는 sql 이기 때문에 상관이 없다.

 디비가 없다면  createdb aaa 로 더미 디비를 생성한다. )

 

을 실행하면 sql이 실행되면서 관련 응답이 나오게 되고 특별한 이상이 없이 끝나면

 

복구는 완료 된다.

1. 프롬프트 설명

'=>' SQL명령 대기 상태

'->' 연속된 명령의 입력 대기 상태 ';'로 마무리시 실행

 

2. 커맨드

\? : 도움말 / 각 커맨드의 간단한 설명이 출력됨

\q : 종료

\d : DB내에 존재하는 TABLE , INDEX,VIEW 등의 목록을 출력해준다.

  -> Wd [table_name] : 테이블의 구조를 출력 ;

\dt : DB내에 존재하는 table리스트만 출력

\dT : DB의 테이블에 들어갈 수 있는 데이타형을 출력;

\e : 최근 사용한 명령(버퍼에 들어있는)을 VI편집기로 편집해준다.=>편집후 자동실행

\h [명령어] : SQL 명령어에대한 간단 설명을 제공

\df : SQL 지원함수 목록을 출력



PostgreSQL 사용법


1. 데이타 베이스 구축 명령


1) create

CREATE TABLE  student {
 std_id CHAR(8),
 std_name VARCHAR(15),
 std_addr VARCHAR(50),
 std_tel  VARCHAR(15),
 std_birthday DATE
};
-----------------------------------------------------------
\d ==> database 내에 존재하는 table과, index의 목록을 출력

\d student ==> student table의 정의 상태를 출력
==========================================================

CREATE TABLE student2 {
 std_id CHAR(8) PRIMARY KEY,
 std_sex CHAR(1) DEFAULT 'M' CHECK (std_sex='M' OR std_sex='F'),
 std_name VARCHAR(15) NOT NULL,
 std_addr VARCHAR(50) NOT NULL,
 std_tel  VARCHAR(15),
 std_handphone VARCHAR(15),
 std_birthday DATE NOT NULL 
};
----------------------------------------------------------
 std_id CHAR(8) PRIMARY KEY,
       => std_id 를 primary key로 설정하였기 때문에 primary key인 컬럼에 대한 
          index가 자동으로 생성되어 지고, 그 index의 name은 student2_pkey가 된다.
(테이블 생성시 출력 메시지)
NOTICE: CREATE TABLE/PRIMARY KEY will create implict index 'student2_pkey' for table 'student2'

 std_sex CHAR(1) DEFAULT 'M' CHECK (std_sex='M' OR std_sex='F'),
 ==> std_sex에는 M과 F외에는 입력될 수 없도록 컬럼값을 설정하였다.
            이외의 값이 입력하려고 하면 입력이 되지 않는다.
========================================================


2) insert

INSERT INTO student (std_id, std_name) values ('990001','홍길동');
INSERT INTO student (std_id, std_name) values ('990001','홍길동');
INSERT INTO student (std_id, std_name,std_addr,std_tel,std_handphone,std_birthday)
             values ('990001','홍길동','서울시XXXXXXX 1층','02-2222-2222','010-2222-2222','1980-06-16');
INSERT INTO student (std_name) values ('홍길동');
-----------------------------------------------------------------
student 의 경우에는 오류 없이 들어간다.
하지만 생성된 4개의 데이타는 서로를 나눌 수 있는 유일한 값(PK)가 없기때문에
추후에 데이타 수정시 4개의 데이타를 구분할 방법이 없다.
student2는 pk인 std_id가 같은 데이타에 대해서는 나중에 들어온 데이타를 허용
하지 않는다 따라서 위 4개의 쿼리를 실행한 결과는 1개의 행만 존재한다.
=========================================================================


3) ALTER
: 데이타베이스 구조를 바꾸는데 사용 
=> ALTER TABLE : 컬럼추가하기,컬럼이름바꾸기,테이블이름바꾸기

ALTER TABLE student ADD COLUMN stu_sex CHAR(1);
--------------------------------
student 테이블에 stu_sex라는 컬럼을 추가
=>DEFAULT나 NOT NULL등이 적용되지 않으므로 참고해서 사용해야한다.
  (다 NULL로 저장된다)
================================

ALTER TABLE student RENAME std_sex TO stu_gender;
ALTER TABLE student2 RENAME TO student3;
---------------------------------------------
컬럼명의 변경과 테이블명의 변경의 방법
(테이블명 변경시 테이블 생성시 PRIMARY KEY설정으로 자동 생성된 INDEX는
자동으로 변경되지 않는다.
=============================================


4) DROP 
   DROP TABLE [테이블명];
DROP TABLE student;
=>테이블 삭제




2. 데이타 구축 명령


1)INSERT
INSERT INTO [TABLE_NAME] {COLUMN,....} VALUES {COLUMN_VALUE,...};
INSERT INTO [TABLE_NAME] VALUES {COLUMN_VALUES,....,END_CLOUMN_VALUES};


2)UPDATE
UPDATE [TABLE_NAME] SET [COLUMN_NAME]=[NEW_VALUE] WHERE [COLUMN_NAME]=[OLD_VALUE];
: WHERE절에 쓸 수 있는 비교 방법에는 AND, OR, LIKE 가 있다.
LIKE는 ' 와 ' 사이에들어있는 문자열로 검색하는 것으로서 %가 전체 문자를 대신하고
?가 한글자를 대신한다.  예) '%하%' => 하를 포함하는 모든 값 을 의미한다.

3)DELETE
DELETE FROM [TABLE_NAME] ; 테이블 전체 삭제
DELETE FROM [TABLE_NAME] WHERE [조건]: 조건에 맞는 항목 삭제
=> WHERE 조건을 잘못 입력하면 전체 테이블에 영향이 갈 수 있으므로 조건의
기준은 PK값을 가진 COLUMN을 기준으로 하는 것이 가장 안전하다.





3. 사용자 명령


1) SELECT

SELECT [COLUMN_NAME|각종표현식] FROM [TABLE_NAME] WHERE [조건];

SELECT * FROM student WHRER std_id > 1000;

SELECT COUNT(num),SUM(num),AVG(num),MAX(num),MIN(num) FROM student2;
       num의 개수,num의합,num의평균,num의최대값,num의최소값을 출력한다.


SELECT DISTINCT * FROM A;
(모든 칼럼이 중복되는 항목은 하나만 출력)
SELECT DISTINCT ON num * FROM A;
(num 칼럼이 중복되는 항목은 하나만 출력)

SELECT * FROM A GROUP BY num;

HAVING

ORDER BY [DESC|ASC=DEFAULT]

UNION, INTERSECT, EXCEPT;
합집합, 교집합, 차집합


JOIN  두개의 테이블을 하나의 값을 기준으로 재정렬,가상 테이블을 생성한다.

CREATE VIEW product_temp AS SELECT a,b,c FROM AA;
(자주 JOIN을 실시 할 내용은 VIEW만들어서 그때 그때 새로 만드는 것이 
아니라 만들어진 VIEW테이블을 이용해서 사용하게끔 하면 빠른 수행속도를
보장할 수 있다.)

+ Recent posts