이 게시물은 PostgreSQL을 소개하고 Linux®에서 버전 9.3의 설치 및 구성을 안내합니다.
소개
PostgreSQL은 세계에서 가장 진보된 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다. Apple, IMDB, Skype, Uber, Lockheed Martin, Verizon 등과 같은 많은 주요 조직에서 PostgreSQL을 사용합니다. 이 RDBMS는 1986년 University of California at Berkeley에서 POSTGRES 프로젝트의 일부로 시작되었으며 핵심 플랫폼에서 30년 이상 활발히 개발되었습니다.
PostgreSQL은 모든 주요 운영 체제에서 실행되며 2001년부터 ACID를 준수했습니다. 약어 ACID는 다음 구성 요소로 구성됩니다.
- 원자성 :전체 트랜잭션이 성공하거나 어느 쪽도 성공하지 않음을 보장합니다.
- 일관성 :모든 데이터의 일관성을 보장합니다. 모든 데이터는 정의된 규칙에 따라 유효합니다. 규칙에는 데이터베이스에 적용된 제약 조건, 계단식 및 트리거가 포함됩니다.
- 격리 :모든 트랜잭션은 개별적으로 발생합니다. 트랜잭션은 아직 완료되지 않은 다른 트랜잭션의 데이터를 읽을 수 없습니다.
- 내구성 :트랜잭션을 커밋한 후에는 작업 직후에 시스템 충돌이 발생하더라도 시스템에 남아 있습니다.
당연히 PostgreSQL은 인기 있는 PostGIS 지리 공간 데이터베이스 익스텐더와 같은 강력한 추가 기능 덕분에 많은 사람과 조직이 선택한 오픈 소스 관계형 데이터베이스 역할을 합니다.
이미지 소스 :https://postgresql-database.blogspot.com/2013/08/postgresql-architecture.html
지원
프로덕션 지원 SLA는 다음 회사에서 사용할 수 있습니다.
- https://www.enterprisedb.com
- https://www.2ndquadrant.com/
- https://www.revsys.com/
- https://imperoit.com/PostgreSQL_Support.htm
지원 버전:현재 (12) / 11 / 10 / 9.6 / 9.5 / 9.4개발 버전:devel지원되지 않는 버전:9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2
설치 및 구성
Postgres 9.3을 설치 및 구성하려면 다음 단계를 수행하십시오.
Linux 7.1에 Postgres 9.3 설치
다음 명령을 실행하여 Red Hat® Linux 7.1에 Postgres 9.3을 설치합니다.
[root@snwdbsolpeprod01 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.1 (Maipo)
빈 폴더 만들기
데이터베이스 설치를 위한 빈 폴더를 만듭니다.
[root@snwdbsolpeprod01 mnt]# mkdir postt
[root@snwdbsolpeprod01 postt]# pwd
/mnt/postt
RPM 다운로드
다음 명령을 실행하여 OS 버전용 RPM(Red Hat Package Manager)을 다운로드하여 Postgres 설치를 시작합니다.
[root@snwdbsolpeprod01 postt]# wget https://yum.postgresql.org/9.3/redhat/rhel-7-x86_64/pgdg-redhat93-9.3-2.noarch.rpm
RPM 설치
다음 명령을 사용하여 RPM 패키지를 설치하십시오.
root@snwdbsolpeprod01 postt]# rpm -ivh pgdg-redhat93-9.3-2.noarch.rpm
추가 패키지 설치
RPM을 설치한 후 DB 소프트웨어를 설치하는 일부 Postgre 패키지를 설치해야 합니다.
[root@snwdbsolpeprod01 postt]# yum install postgresql-contrib.x86_64
[root@snwdbsolpeprod01 postt]# yum install postgresql93-server.x86_64
PGDATA 위치 구성
데이터를 저장할 위치를 결정합니다. 기본이 아닌 데이터 위치를 사용하려면 PostgreSQL 서비스 sysconfig를 수정하세요. 파일을 만들고 PGDATA 인수를 변경합니다.
vi /etc/rc.d/init.d/postgresql
vi /etc/sysconfig/pgsql/postgresql
참고 :sysconfig/pgsql의 PostgreSQL인 경우 존재하지 않는 경우 생성하고 다음 예와 같이 데이터를 저장할 위치를 나타내는 줄을 추가합니다.
[root@snwdbsolpeprod01 pgsql]# cd /etc/sysconfig/pgsql/
[root@snwdbsolpeprod01 pgsql]# vi postgresql
[root@snwdbsolpeprod01 pgsql]# cat postgresql
PDGATA=/mnt/postt
데이터베이스 초기화
첫 번째 명령(한 번만 필요)은 PGDATA에서 데이터베이스를 초기화하는 것입니다.
service <name> initdb
예:버전 9.3의 경우:
service postgresql-9.3 initdb
또는
/usr/pgsql-9.3/bin/postgresql93-setup initdb
[root@snwdbsolpeprod01 data]# /usr/pgsql-9.3/bin/postgresql93-setup initdb
Initializing database ... OK
Postgres가 자동으로 시작되도록 설정
OS가 시작될 때 PostgreSQL이 자동으로 시작되도록 하려면 다음 명령을 사용하십시오.
[root@snwdbsolpeprod01 data]# chkconfig postgresql-9.3 on
참고 :'systemctl enable postgresql-9.3.service'로 전달 요청.
PostgreSQL 서비스 시작
PostgreSQL 서비스를 시작하려면 다음 명령을 실행하십시오.
[root@snwdbsolpeprod01 data]# systemctl start postgresql-9.3.service
데이터베이스 구성
다음 예와 같이 postgresql.conf를 업데이트하여 데이터베이스를 쉽게 구성할 수 있습니다.
vi /var/lib/pgsql/9.3/data/postgresql.conf
다음을 변경하십시오.
listen_address = ‘*’
port = 15000
max_connections=300
shared_buffers = 8192MB # min 128kB
# (change requires restart)
temp_buffers = 128MB # min 800kB
max_prepared_transactions = 20 # zero disables the feature
log_destination = 'csvlog'
logging_collector = on
log_directory = '/mnt/pgsql/logs'
log_filename = 'postgresql-%a.log'
#------------------------------------------------
# AUTOVACUUM PARAMETERS
#------------------------------------------------
autovacuum = on
# Enable autovacuum subprocess? 'on'
# requires track_counts to also be on.
#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and
# their durations, > 0 logs only
# actions running at least this number
# of milliseconds.
autovacuum_max_workers = 3 # max number of autovacuum subprocesses
# (change requires restart)
autovacuum_naptime = 10080min # time between autovacuum runs
autovacuum_vacuum_threshold = 1000 # min number of row updates before
# vacuum
#autovacuum_analyze_threshold = 50 # min number of row updates before
# analyze
#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum
#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze
#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum
# (change requires restart)
#autovacuum_multixact_freeze_max_age = 400000000 # maximum Multixact age
# before forced vacuum
# (change requires restart)
#autovacuum_vacuum_cost_delay = 20ms # default vacuum cost delay for
# autovacuum, in milliseconds;
# -1 means use vacuum_cost_delay
#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for
# autovacuum, -1 means use
# vacuum_cost_limit
데이터베이스 연결 설정 구성
데이터베이스 연결 설정을 제한하거나 관리하려면 다음 명령을 실행하십시오.
vi /var/lib/pgsql/9.3/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
local all postgres md5
local all postgres ident
# IPv4 local connections:
# IPv6 local connections:
host all all ::1/128 ident
host all all 0.0.0.0/0 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 ident
#host replication postgres ::1/128 ident
방화벽 구성
방화벽에서 포트를 구성하려면 다음 명령을 실행하십시오.
iptables -I INPUT -p tcp --dport 15000 --syn -j ACCEPT
service iptables save
service iptables restart
root@snwdbsolpeprod01 postt]# service postgresql-9.3 restart
사용자 또는 역할 생성
데이터베이스에서 새 사용자 또는 역할을 생성하려면 다음 명령을 실행하십시오.
su – postgres
psql -p 15000
postgres=# CREATE ROLE OCT1 LOGIN
UNENCRYPTED PASSWORD 'test@123'
INHERIT REPLICATION;
테이블스페이스 생성
데이터베이스에 새 테이블스페이스를 생성하려면 다음 명령을 실행하십시오.
postgres=# CREATE TABLESPACE OCT1_tablespace
OWNER ilusr
LOCATION '/usrdata/pgsql/data/oct';
데이터베이스 생성
새 데이터베이스를 생성하려면 다음 명령을 실행하십시오:
postgres=# CREATE DATABASE OCT1
WITH ENCODING='UTF8'
OWNER=test
LC_CTYPE='en_US.UTF-8'
CONNECTION LIMIT=-1
TABLESPACE=OCT1_tablespace;
기본 명령
일부 기본 관리 명령에는 다음이 포함됩니다.
PostgreSQL 중지 및 시작
/opt/PostgreSQL/9.3/bin/pg_ctl -D /mnt/postt/data stop
/opt/PostgreSQL/9.3/bin/pg_ctl -D /mnt/postt/data start
/opt/PostgreSQL/9.3/bin/pg_ctl -D /mnt/postt/data restart
/opt/PostgreSQL/9.3/bin/pg_ctl -D opt/PostgreSQL/9.4/data –m smart stop #wait for complete the transactions
/opt/PostgreSQL/9.3/bin/pg_ctl -D /mnt/postt/data –m fast stop #Immediate stop
/opt/PostgreSQL/9.3/bin/pg_ctl -D /mnt/postt/data –m immediate stop #Abort the DB
/opt/PostgreSQL/9.3/bin/pg_ctl -D /mnt/postt/data –m smart restart
/opt/PostgreSQL/9.3/bin/pg_ctl -D /mnt/postt/data –m fast restart
/opt/PostgreSQL/9.3/bin/pg_ctl -D /mnt/postt/data –m immediate restart
PostgreSQL 버전 확인
postgres=# select version();
특정 데이터베이스 수준에서 활동 식별
select pid,backend_xid,backend_xmin,query from pg_stat_activity ;
테이블 상태 분석
select relname,last_autoanalyze,last_analyze,n_mod_since_analyze from pg_stat_all_tables;
테이블의 물리적 경로 찾기
postgres=# SELECT pg_relation_filepath('testpitr1');
pg_relation_filepath
----------------------
base/13003/16399
[postgres@postgres221 data]$ ls -l /mnt/postt/data/base/13003/16399
-rw------- 1 postgres postgres 256024576 Feb 21 06:36 /mnt/postt/data/base/13003/16399
인스턴스 또는 클러스터 내부의 스키마 이름 가져오기
select schema_name from information_schema.schemata;
select nspname from pg_catalog.pg_namespace;
post_gre=# \dn
List of schemas
Name | Owner
--------------+----------
kailash_test | postgres
public | postgres
(2 rows)
인스턴스 또는 클러스터 내에서 dbname 가져오기
template1=# select datname from pg_database;
template1
template0
post_gre
template1=# \l
post_gre | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres +
| | | | | postgres=CTc/postgres +
| | | | | kailash_s=CTc/postgres
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | |
template1=# select usename from pg_catalog.pg_user;
kailash
kailash_s
postgres
template1=# \du
kailash | | {}
kailash_s | Superuser, Create role, Create DB | {}
postgres | Superuser, Create role, Create DB, Replication | {}
결론
PostgreSQL의 태그 라인은 이것이 "세계에서 가장 진보된 오픈 소스 데이터베이스"라고 주장합니다. 그러나 PostgreSQL은 단순히 관계형이 아니라 객체 관계형입니다. 이러한 구별은 MySQL, MariaDB 및 Firebird와 같은 다른 오픈 소스 SQL 데이터베이스에 비해 약간의 이점을 제공합니다. PostgreSQL은 사내 RDBMS를 CLOUD의 오픈 소스 RDBMS로 마이그레이션하기 위한 AWScloud의 확실한 선택입니다.
이 블로그의 2부에서는 Postgre 백업 복원 및 복구를 다룹니다.
피드백 탭을 사용하여 의견을 작성하거나 질문하십시오. 지금 채팅을 시작하여 대화를 시작할 수도 있습니다.
데이터베이스 서비스에 대해 자세히 알아보기