Gentoo With PostgreSQL

From 흡혈양파의 인터넷工房
Jump to navigation Jump to search
Gentoo Linux에서 postgreSQL사용하기

본 문서는 gentoo linux에서 postgreSQL을 사용하기위한 기본 내용을 담고있다.

또한 문서의 작성일 또는 사용된 software의 버전을 참고해서 향후 사용하는데 참고할 수 있게 하는것에 그 목적이 있다.


기본사항

  • gentoo linux
  • postgreSQL 9.2.2


내용

postgreSQL의 설치

postgreSQL(이하 pgsql)은 9.2.2버전을 설치하는것으로 전제한다.

  • postgresql-base-9.2.2-r1
  • postgresql-server-9.2.2-r1


이상 2개의 버전을 설치하기로 한다


postgreSQL의 설치 후 기본초기화

pgsql을 설치한후 /etc/init.d/postgresql-9.2 start 를 실행하면 다음과 같은 문구가 나온다

coreonion ~ # /etc/init.d/postgresql-9.2 start
 * Caching service dependencies ...                                       [ ok ]
 * Directory not found: /var/lib/postgresql/9.2/data
 * HINT: Ensure that DATA_DIR points to the right path.
 * HINT: Or perhaps you need to create the database cluster:
 *     emerge --config dev-db/postgresql-server:9.2
 * ERROR: postgresql-9.2 failed to start


물론 위의 내용은 pgsql을 초기화 하지 않았기떄문에 나오는 내용이며

시키는대로 초기화를 해준다면 아무런 문제가 없다.

coreonion ~ # emerge --config dev-db/postgresql-server:9.2


Configuring pkg...

 * You can modify the paths and options passed to initdb by editing:
 *     /etc/conf.d/postgresql-9.2
 * 
 * Information on options that can be passed to initdb are found at:
 *     http://www.postgresql.org/docs/9.2/static/creating-cluster.html
 *     http://www.postgresql.org/docs/9.2/static/app-initdb.html
 * 
 * PG_INITDB_OPTS is currently set to:
 *     (none)
 * 
 * Configuration files will be installed to:
 *     /etc/postgresql-9.2/
 * 
 * The database cluster will be created in:
 *     /var/lib/postgresql/9.2/data
 * 
 * Are you ready to continue? (y/n)


이상의 내용으로 pgsql을 초기화할것인가를 묻는다.

당연히 y를 눌러 pgsql의 사용을 위한 초기화를 진행한다.

아래와같은 내용이 나오면서 초기화가 진행된다

 * Checking system parameters...
 * Checking whether your system supports at least 128 connections...
 * Passed.
 * Creating the data directory ...
 * Initializing the database ...
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "ko_KR.utf8".
The default database encoding has accordingly been set to "UTF8".
initdb: could not find suitable text search configuration for locale "ko_KR.utf8"
The default text search configuration will be set to "simple".

fixing permissions on existing directory /var/lib/postgresql/9.2/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 24MB
creating configuration files ... ok
creating template1 database in /var/lib/postgresql/9.2/data/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating collations ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
loading PL/pgSQL server-side language ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    /usr/lib64/postgresql-9.2/bin/postgres -D /var/lib/postgresql/9.2/data
or
    /usr/lib64/postgresql-9.2/bin/pg_ctl -D /var/lib/postgresql/9.2/data -l logfile start

 * The autovacuum function, which was in contrib, has been moved to the main
 * PostgreSQL functions starting with 8.1, and starting with 8.4 is now enabled
 * by default. You can disable it in the cluster's:
 *     /etc/postgresql-9.2/postgresql.conf
 * 
 * The PostgreSQL server, by default, will log events to:
 *     /var/lib/postgresql/9.2/data/postmaster.log
 * 
 * You should use the '/etc/init.d/postgresql-9.2' script to run PostgreSQL
 * instead of 'pg_ctl'.


이중에서 혹시 중요할만한 내용을 점검해보기로한다.

  • pgsql의 초기데이터(이후도 마찬가지겠지만)가 저장되는 경로는 /var/lib/postgresql/9.2/data
  • pgsql을 다시 초기화하고싶으면 data를 포함한 디렉토리를 rm -rf 로 제거해주면 끝
  • pgsql에는 vacuum이라는게 있다. 모르겠으면 별도 검색 필요
  • vacuum을 자동으로 처리해주는 autovacuum이 8.4 버전 이후는 기본으로 enable. 끄고싶으면 /etc/postgresql-9.2/postgresql.conf 설정파일을 참고할것.


이후 아래의 명령어를 실행하고 결과를 보면 기본설정은 제대로 된것으로 판단해도 무방하다

coreonion ~ # /etc/init.d/postgresql-9.2 start
 * /var/run/postgresql: creating directory
 * /var/run/postgresql: correcting owner
 * Starting PostgreSQL ...                              [ ok ]


postgreSQL에서의 사용자 생성

pgsql에서 사용자를 생성한다는것은 사용자의 role을 생성한다는 것으로 생각하면 된다.

다음을 타이핑하고 진행해서 role을 생성한다.

물론 database는 구동이 되어있는 상태여야한다

coreonion ~ # createuser -U postgres -P mumu
새 롤의 암호: 
암호 확인:


보이듯이 암호만 설정해주면 user를 사용할수 있는 최소한의 준비가 끝난다.

물론 pgsql을 compile할때 LINGUAS="ko en"을 해줘야 한글 메세지가 나온다.


이후 /etc/postgresql-9.2/pg_hba.conf 파일의 내용을 보면 다음과같은 부분이 있다

# TYPE  DATABASE        USER            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
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                trust
#host    replication     postgres        127.0.0.1/32            trust
#host    replication     postgres        ::1/128                 trust


물론 pgsql의 접근권한을 설정하는 파일로서 별다른 외부에서 접근을 제한할 필요가 없다면 기본값으로 놔두면 된다. 크게 신경쓸 필요는 없음. 하지만 참고는 해두어야 나중에 외부에서 접근하도록 설정할 수 있다.

crop해놓은 내용의 제일 윗줄을 보면 각 필드가 무엇을 의미하는지 알 수 있다.

예를들어 생성한 특정DB를 모든 IP에서 접근하게 하고싶다면 다음과같이 설정하면 된다

host	DATABASE_NAME	all		빈칸			trust

이정도면 사용자의 접근권한에 대한 기본설명은 끝난다.

(왜인지는 모르겠지만.... 요즘은 다른 role에 대한 설명을 안물어본다)


postgreSQL에서 database생성하기

pgsql에서 db생성을 하기위한 명령어는 다음과 같다.

이후부터는 작업의 편의를 위해 postgres 계정의 권한으로 진행하기로 한다.

(사실 user생성부터 postgres계정으로 진행하는게 맞다. pg_hba.conf 파일의 수정 빼고)

postgres@coreonion ~ $ createdb -E UTF8 -l ko_KR.utf8 -O mumu mumudb


썰렁하게 끝난다. 별도로 나오는 말도 없다. 여기가 그냥 끝.

간단하게 옵션을 설명하자면 다음과같다.

  • -E 데이터베이스 인코딩
  • -l 데이터베이스의 locale 설정.
  • -O 생성되는 데이터베이스의 소유자. 지정하고싶은 사람을 지정하면 된다.
  • mumudb는 데이터베이스의 이름


postgreSQL의 admin user 비밀번호 변경

pgsql을 maintenance하는 pgsql내부의 postmaster계정은 postgres이다

다음의 과정을 통해 비번을 변경하도록 한다.

postgres@coreonion ~ $ psql -U postgres
psql (9.2.2)
Type "help" for help.

postgres=# \password
Enter new password: 
Enter it again: 
postgres=#

물론 비번을 보여줄 수는 없다.


postgreSQL을 사용하는데 필요한 설정파일

gentoo linux에서의 환경설정 파일

gentoo linux의 경우는 해당되는 내용이 /etc/conf.d/postgresql-9.2 파일안에 있다

기존에 pgsql을 사용하고있었는데 migration하는경우는 이 파일을 필수적으로 보도록 한다.

또한 파일의 내용중 아래의 부분을 수정해놓으면 이후 database를 생성할때 추가적으로 -l 옵션을 줘야할 필요가 없다.

PG_INITDB_OPTS="--locale=ko_KR.UTF-8"


postgreSQL을 원격에서 접속가능하게 하기위한 설정

/etc/postgresql-9.2/postgresql.conf 파일안에서 수정해줘야할 부분이 있다

port = 5432

아마도 당신이 pgsql을 처음설치했다면 위의 부분이 주석처리 되어있을것이다.

물론 주석을 풀고 값을 설정해주어야 한다.

접근을 별도로 차단하고 싶으면 위쪽의 listen_addresses 부분을 설정해주면 손쉽게 접근IP를 특정할 수 있다.


psql을 사용한 postgreSQL의 접속테스트

아래의 명령어대로 입력해주면 간단하다

coreonion postgresql-9.2 # psql -h localhost -p 5432 -U postgres
psql (9.2.2)
Type "help" for help.

postgres=#


참고로 postgres가 아니라 다른계정으로 login하면 다음같은 prompt를 볼 수 있다.

mumu=>


psql로 login한 상태에서 다음의 query등을 테스트해서 아래와같은 내용이 나오면 성공.

lookandwalk-> \dt
No relations found.


아무것도 생성된 테이블이 없으니 relation이 없다고 나오는건 당연한 결과다.


pgadmin3를 이용한 pgsql의 접속테스트

일단 pgadmin3을 설치하도록 한다. 그래야 이후를 진행할 수 있으니....

coreonion ~ # emerge -pv pgadmin3

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild     UD ] dev-db/pgadmin3-1.14.3 [1.16.1-r1] USE="-debug (-databasedesigner%*)" 14,722 kB


아마도 아무것도 설치되어있는 않은 상태라면 좀 다른 메세지가 나오게 되겠지만....

일단 위의패키지를 확인하고 설치하도록 한다.

그리고 pgadmin3라는 명령어로 실행하면 다음과 같은 화면이 나온다.

Pgadmin1.png


위쪽의 전기콘센트같은 아이콘을 눌러서 접속할 서버를 추가하는 작업을 진행한다. 필요한 항목을 입력하면 다음과같이 된다.

Pgadmin2.png

항목을 간단하게 설명하면 다음과 같다

  • Name :: pgadmin3 프로그램 내에서 사용하기위한 이름. 맘대로 붙여도 된다
  • Host :: 접속할 서버의 주소. 이 경우에는 pgadmin3와 같은 PC에서 돌기때문에 localhost를 지정해줬다
  • Post :: 접속할 서버 daemon의 port번호. 위의 postgresql.conf 부분 참고
  • MaintenamceDB :: 접속할 서버의 database이름. 이 문서대로 진행했다면 mumudb가 되겠다
  • Username :: database에 권한이 할당된 user의 이름.


제대로 값을 설정한다음 다음과같이 설정한 서버가 추가된다

Pgadmin3.png


해당되는 서버를 클릭해서 제대로 접속이 되는지를 확인한다. 화면에 보이는것같은 정보가 나온다면 접속은 제대로 성공한것이다.

Pgadmin4.png


이제 맘대로 쓰면 된다.


postgreSQL 시스템에서 알아두면 도움되는 테이블목록(system table)

  • pg_tables :: 등록된 table의 목록
  • pg_database :: 등록된 db의 목록
  • pg_user :: 등록된 user의 목록


참고사항

  • postgreSQL사용시 9.2.1은 내부 procedure사용시 버그가 있음. 9.2.2 이상을 사용하기 바람.


참고자료

http://www.gentoo.org/doc/en/postgres-howto.xml

http://en.gentoo-wiki.com/wiki/PostgreSQL

http://www.superuser.co.kr/superuserboard/view.html?id=6597&code=linux&start=0&position=

http://www.postgresql.org/docs/8.1/static/index.html

http://database.sarang.net/database/postgres/tutorial/lecture/c89.htm#AEN106

http://en.wikibooks.org/wiki/Converting_MySQL_to_PostgreSQL

http://www.ntchosting.com/postgresql/sequence.html#An_example_of_how_to_Create_a_Sequence_in_PostgreSQL

http://enjoyprogramming.tistory.com/7

vacuum관련자료