강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
▒ Doly의 CentOS7 강좌36 16.4 postgreSQL
조회 : 17,552  


▒ Doly의 CentOS7 강좌36 16.4 postgreSQL




16. 데이터베이스
16.4. postgreSQL


▲ PostgreSQL 홈페이지


PostgreSQL은 강력한 차세대 객체-관계형 DBMS로 Berkeley Postgres 데이터베이스 관리 시스템에서 파생되었다. PostgreSQL은 강력한 객체-관계형 데이터 모델과 풍부한 데이터 타입, 쉬운 확장성을 가지고 있으며, PostQuel질의 언어를 확장된 SQL의 부분 집합으로 대체하고 있다. PostgreSQL은 MySQL의 부족한 부분과 라이선스 문제를 해결하기 위해 많이 사용되었다. 대부분의 리눅스 배포판에서 PostgreSQL을 패키지로 제공한다. 설치는 패키지 관리 도구인 "yum"으로 설치하고 기본 운영 및 웹서비스와 연동하는 부분을 알아보자.

16.4.1. PostgreSQL 설치
PostgreSQL은 대부분의 리눅스 배포판에서 패키지형태로 제공한다. CentOS7 또한 PostgreSQL을 제공하며, 다음과 같이 "yum" 명령어로 PostgreSQL을 설치 해보자.

~]# yum -y install postgresql-server

PostgreSQL 시스템 DB 생성
PostgreSQL의 시스템 DB를 다음과 명령어로 생성한다. 시스템 DB를 생성하지 않으면 postgresql 서비스가 시작되지 않는다.
~]# postgresql-setup initdb
Initializing database ... OK

16.4.2. PostgreSQL 운영
CentOS7에서 제공하는 패키지로 PostgreSQL를 설치하였다면 리눅스의 서비스로 등록될 것이다. 다음과 같이 서버 부팅 시 자동으로 시작되게 설정한다.

~]# systemctl enable postgresql
ln -s '/usr/lib/systemd/system/postgresql.service' '/etc/systemd/system/multi-user.target.wants/postgresql.service'


systemctl 명령어로 PostgreSQL 시작한다.
~]# systemctl start postgresql


PostgreSQL 동작 확인
~]# systemctl status postgresql
postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled)
   Active: active (running) since 화 2015-04-14 23:23:02 KST; 26s ago
  Process: 19572 ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o -p ${PGPORT} -w -t 300 (code=exited, status=0/SUCCESS)
  Process: 19566 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 19576 (postgres)
   CGroup: /system.slice/postgresql.service
           ├─19576 /usr/bin/postgres -D /var/lib/pgsql/data -p 5432
           ├─19577 postgres: logger process
           ├─19579 postgres: checkpointer process
           ├─19580 postgres: writer process
           ├─19581 postgres: wal writer process
           ├─19582 postgres: autovacuum launcher process
           └─19583 postgres: stats collector process

 4월 14 23:23:01 localhost.localdomain systemd[1]: Starting PostgreSQL database server...
 4월 14 23:23:02 localhost.localdomain systemd[1]: Started PostgreSQL database server.


PostgreSQL 정지
~]# systemctl stop postgresql


PostgreSQL 접속 테스트su 명령어로 postgres 사용자로 전환한 다음, psql 명령어를 통해 DB에 접속

~]# su - postgres
-bash-4.2$ psql
psql (9.2.10)
Type "help" for help.

postgres=#


16.4.3. 연동 테스트를 위한 DB 및 사용자 생성
웹과 PostgreSQL을 연동하기 위해 PostgreSQL의 DB와 사용자를 생성해야 한다. 다음예제는 sulinux DB 생성, sulinux 사용자를 생성 및 접속을 위한 설정을 하는 것이다.
인증 설정수정(/var/lib/pgsql/data/pg_hba.conf)


host    all             all             127.0.0.1/32            ident
#====> 다음과 같이 수정 ==>
host    all             all             127.0.0.1/32            password



위 설정은 로컬호스트에서 DB에 접속 시 비밀번호를 사용한다는 설정이다. 기본 설정은 로컬사용자와 DB사용자가 같아야 접속되는 것인데, 이렇게 설정하면 웹 접근이 되지 않아 위와 같이 설정한다. 위와 같이 설정 후 DB를 재시작 한다.


~]# systemctl restart postgresql


DB사용자 생성
 ~]# su - postgres
-bash-4.2$ createuser -d -P sulinux
새 롤의 암호: 비밀번호
암호 확인: 비밀번호


postgres 사용자로 전환하고, createuser 명령어를 사용하여 sulinux 사용자를 생성한다. 여기서 -d 옵션을 주어 database를 생성할 수 있게 하고, -P 옵션을 주어 생성과 동시에 사용자의 비밀번호 입력을 받는다. 자세한 옵션은 createuser --help를 입력하여 확인한다. 만약 사용자 생성을 잘못했을 경우 삭제를 위해서는 dropuser 명령어를 사용하면 된다.

sulinux 사용자의 DB(sulinux)를 생성한다.
-bash-3.2$ createdb -U sulinux sulinux -h 127.0.0.1
암호: sulinux사용자의비밀번호


postgres 사용자로 전환하고, createdb 명령어를 사용하여 sulinux DB를 생성한다. 여기서 -U 옵션을 주어 사용자를 지정하였고, -h 옵션으로 접속할 수 있는 IP를 명시하였다. 자세한 옵션은 createdb --help를 입력하여 확인하자. 만약 DB를 잘못 만들었다면, dropdb 명령어를 사용하여 생성된 DB를 삭제할 수 있다.


psql 명령어를 통한 DB접속 및 DB확인
-bash-3.2$ psql -U sulinux -h 127.0.0.1
Password for user sulinux: 비밀번호
psql (9.2.10)
Type "help" for help.

sulinux=> \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | ko_KR.UTF-8 | ko_KR.UTF-8 |
 sulinux   | sulinux  | 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)

sulinux=>


psql명령어에 -U 옵션을 주어 사용자를 지정하고, -h 옵션을 주어 서버 IP를 지정하였다. DB 접속 후에는 "\l"을 입력하여, 생성된 DB리스트를 확인하였다.  "\?" 입력하면 자세한 도움말을 얻을 수 있다.


16.4.4. PHP에 PostgreSQL모듈 올리기
CentOS7에서 제공되는 PHP패키지를 rpm으로 설치했다면, PostgreSQL 연동을 위해 php-pgsql 패키지를 추가 설치해야 연동이 가능하다. yum을 이용하여 설치하자.


 ~]# yum -y install php-pgsql
PostgreSQL 관련 모듈의 로드 여부를 확인하기 위해 다음과 같이 php의 "-i" 옵션을 사용하여 확인한다. 아래와 같이 pgsql 설정이 있다면 정상 설치된 것이다.


~]# php -i |grep pgsql
/etc/php.d/pdo_pgsql.ini,
/etc/php.d/pgsql.ini,
PDO drivers => mysql, pgsql, sqlite
pdo_pgsql
pgsql
pgsql.allow_persistent => On => On
pgsql.auto_reset_persistent => Off => Off
pgsql.ignore_notice => Off => Off
pgsql.log_notice => Off => Off
pgsql.max_links => Unlimited => Unlimited
pgsql.max_persistent => Unlimited => Unlimited


PHP 모듈 추가 설치 또는 설정 변경 후에는 꼭 Apache 웹서버를 재시작 해야 한다. systemctl으로 다음과 같이 Apache 웹서버를 재시작 하자.
 ~]# systemctl restart httpd


16.4.5. DB 연동 테스트
PHP에서 DB를 연동하는 아주 간단한 프로그램을 작성하여 테스트해 보도록 하겠다. "/var/www/html/pgsqltest.php" 파일을 다음과 같이 작성해 본다.


<?php
  echo "DB Connect<BR>";
  $pgsql = pg_Connect("host=127.0.0.1 dbname=sulinux user=sulinux password=패스워드");

  echo "Create sutable table<BR>";
  $result = pg_exec($pgsql,"CREATE TABLE sutable ( a text )");

  echo "Insert data<BR>";
  $result = pg_exec($pgsql,"INSERT INTO sutable VALUES('DataBase Test')");

  echo "Select data<BR>";
  $result = pg_exec($pgsql,"SELECT * FROM sutable");

  echo "Fetch data<BR>";
  $row = pg_fetch_array($result);
  echo "Result : <FONT color=red>".$row["a"]."</FONT><BR>";

  echo "Drop sutable table<BR>";
  $result = pg_exec($pgsql,"DROP TABLE sutable");

?>


위 프로그램은 PostgreSQL DB에 연결하고, sulinux DB를 선택하며, "sutable"이라는 테이블을 생성한다. 생성된 테이블에 "DataBase Test"라는 값을 삽입하고, 삽입된 데이터는 SELECT 구문을 사용하여 뽑아낸다. 뽑아낸 데이터를 배열로 만든 다음, 출력한다. 출력 후에는 "sutable"을 제거하는 간단한 프로그램이다. 웹브라우저에서 "http://localhost/ pgsqltest.php"를 호출하면 다음과 같은 결과를 볼 수 있을 것이다.


이상으로 36번째 강좌를 마무리 합니다. 요즘 PostgreSQL 또한 많이 쓰죠? 기본만 다루었습니다. 더 필요하신 분들은 관련 버전에 맞는 관련 서적으로 학습하시길 바랍니다. DBMS는 기본이 튼튼해야 합니다. OS 또한 마찬가지죠. 열심히 뛰는 도리(Doly)였습니다.^^ 
 
#################################################
* 본 강좌는 언제든 갱신될 수 있으며, 원글은 www.linux.co.kr 강좌>리눅스>Doly의 연재강좌 에서 수정됩니다. 
* 본 강좌의 일부 또는 전체를 인용하실 경우, 반드시 출처를 밝혀 주시기 바랍니다.

* 수정이력 :
 2016.04.26(화): 최초 작성

[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1872


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
도리
도리(Doly)
(주)수퍼유저 기술이사 (CTO)
리눅스마스터 1급,2급 추천교재(2014년) 집필
리눅스마스터 1급,2급 전문위원(출제)(한국정보통신진흥협회, 2005년~)
SULinux 1.0, 1.5, 2.0, 2014 개발 총괄(sulinux.net, 1998년~)
SSU,LSCP,LSMP,CCMT외 다수 오픈소스 프로젝트 개발 및 운용 (lscp.sf.net외,2009년~)
리눅스 대량 시스템 구축 및 관리(5,000대리눅스 서버 구축 및 관리 경험, 2000년~)

E-Mail : doly골뺑이superuser.co.kr
소개 : 하루 하루 최선을 다합시다!!