'PostgreSQL'에 해당되는 글 6건
- 2013.11.22 [PostgreSQL 에러] ERROR: syntax error at or near "NOT"
- 2013.11.22 [PostgreSQL 에러] ERROR: language "plpgsql" does not exist
- 2013.03.22 [PostgreSQL] UUID 생성 실패
- 2013.03.22 [PostgreSQL] psql 명령어
- 2013.03.21 [PostgreSQL] IP주소 변환 ( int to string, string to int )
- 2013.03.20 PostgreSQL 의 대소문자 구분
PostgreSQL 에서 uuid_generate_v4() 라는 함수를 호출하여, UUID 를 생성할 수 있는데..
아래와 같은 에러 메세지와 함께, 실패하는 경우가 있다.
ERROR: function uuid_generate_v4() does not exist
PostgreSQL 에서 UUID 는 uuid-ossp 라는 extension (일종의 플러그인) 을 통해서 제공된다.
그래서, 이런 에러 발생시 아래 두가지 조치가 필요하다.
(자세한 내용은 Extensions in Postgres 페이지 참고)
1) extension 에 uuid-ossp 가 있는지 확인
2) uuid-ossp 활성화
관련 쿼리는 아래와 같다.
1-1) 등록된 extension 목록 조회 쿼리
SELECT * FROM pg_extension;
쿼리 결과에 "uuid-ossp" 가 없다. 아래 <1-2) 사용 가능한 extension 목록 조회 쿼리> 를 실행한다.
1-2) 사용 가능한 extension 목록 조회 쿼리
SELECT * FROM pg_available_extensions;
쿼리 결과에 "uuid-ossp" 가 존재하면, 아래 <2) uuid-ossp 활성화 쿼리> 를 실행한다.
(존재하지 않으면, uuid-ossp" 를 다운 받아서, extension 에 설치 해야 한다.)
2) uuid-ossp 활성화 쿼리
CREATE EXTENSION "uuid-ossp";
[참조: Extensions in Postgres]
[참조: PostgreSQL 메뉴얼 - F.40. uuid-ossp 항목]
[참조: uuid-ossp 다운로드 페이지]
> PostgreSQL 서비스 실행
pg_ctl start -l logfile
또는
service postgres start
> psql 실행 하면서 <postgres> database에 연결 (Ubuntu, PostgreSQL 9.2 설치 기준)
sudo -u postgres psql postgres
> psql 종료
\q
> 도웅말 표시
\?
> 사용자 목록 표시
\du
> database 목록 표시
\l
> schema 목록 표시
\dn
> test_schema 의 table 목록 표시
\dt test_schema.*
> test_schema 의 test_table 의 column 목록 표시
\d test_schema.test_table
> database 생성
CREATE DATABASE test_db;
> test_db (database) 에 연결
\c test_db
> 버전 표시
SELECT VERSION();
> PSQL 에서 Query 또는 명령어 실행 ( 예) testdb 데이터베이스의 myschema.mytable 쿼리 )
> PSQL 에서 파일에 저장된 Query 실행 ( 예) testdb 데이터베이스 연결하여 쿼리 실행 )
> PSQL 에서 원격지 서버 (192.168.0.10) 에 계정 postgres 로 연결
> PSQL 에서 원격지 서버 (192.168.0.10) 접속시 비밀번호 (mypassword) 지정
1) Integer 형 IP주소를 varchar로 변환 (int to string)
예) -1062731420 --> '192.168.1.100'
DROP FUNCTION IF EXISTS my_db.fn_ipnum2str(var_int_ip INTEGER);
CREATE FUNCTION my_db.fn_ipnum2str(var_int_ip INTEGER)
RETURNS CHARACTER VARYING AS $$
BEGIN
RETURN ((var_int_ip>>24&255)||'.'||(var_int_ip>>16&255)||'.'||(var_int_ip>>8&255)||'.'||(var_int_ip>>0&255));
END;
$$ LANGUAGE plpgsql;
2) Varchar 형 IP주소를 integer 형으로 변환 (string to int)
예) '192.168.1.100' --> -1062731420
DROP FUNCTION IF EXISTS my_db.fn_ipstr2num(CHARACTER VARYING);
CREATE FUNCTION my_db.fn_ipstr2num(var_str_ip CHARACTER VARYING)
RETURNS INTEGER AS $$
DECLARE
var_bigint_ip BIGINT DEFAULT 0;
var_result INT DEFAULT 0;
BEGIN
-- ip string to bigint (int8)
var_bigint_ip = CAST(var_str_ip AS INET) - '0.0.0.0'::INET;
-- bigint (int8) to int (int4) : bigint -> hex -> int
EXECUTE 'SELECT x''' || to_hex(var_bigint_ip) || '''::int' INTO var_result;
RETURN var_result;
END;
$$ LANGUAGE plpgsql
1) PostgreSQL 에서는 기본적으로 모든 쿼리가 소문자로 변환된다.
쿼리 : CREATE DATABASE MyDatabase
결과 : mydatabase
2) 대소문자를 구분하려면 명시적으로 인용부호 (") 로 감싸야 한다.
쿼리 : CREATE DATABASE "MyDatabase"
결과 : MyDatabase
3) 그런데,pgAdmin 의 UI 를 사용하여
데이터베이스(Database), 스키마(Schema), 테이블(Table), 함수(Function) 등을 생성하면,
항상 인용부호(") 를 자동으로 붙이기 때문에,
대소문자에 대해서 입력한 대로 반영된다. 주의!!