카테고리 없음2013. 11. 22. 16:36

> 에러 메세지

ERROR:  syntax error at or near "NOT"

LINE 1: CREATE TABLE IF NOT EXISTS ...


> 해결 방법 

PostgreSQL 9.1 이상 설치


Posted by 좋은나무
카테고리 없음2013. 11. 22. 10:56

> 에러 메세지 :

ERROR: language "plpgsql" does not exist


> 처리 : 

psql 실행 후, 다음 명령어 수행

CREATE LANGUAGE plpgsql;


> 확인 :

SELECT * FROM pg_language;


Posted by 좋은나무
카테고리 없음2013. 3. 22. 11:38

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 다운로드 페이지]

Posted by 좋은나무
카테고리 없음2013. 3. 22. 10:53

> 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 -d testdb -c 'select * from myschema.mytable'


> PSQL 에서 파일에 저장된 Query 실행 ( 예) testdb 데이터베이스 연결하여 쿼리 실행 )

psql -d testdb -f my_query.sql 또는 psql -d testdb < my_query.sql


> PSQL 에서 원격지 서버 (192.168.0.10) 에 계정 postgres 로 연결

psql -h 192.168.0.10 -U postgres -d testdb < my_query.sql

> PSQL 에서 원격지 서버 (192.168.0.10) 접속시 비밀번호 (mypassword) 지정

PGPASSWORD=mypassword psql -h 192.168.0.10 -U postgres -d testdb < my_query.sql


Posted by 좋은나무
카테고리 없음2013. 3. 21. 21:28

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


Posted by 좋은나무
카테고리 없음2013. 3. 20. 17:03

1) PostgreSQL 에서는 기본적으로 모든 쿼리가 소문자로 변환된다.


쿼리 : CREATE DATABASE MyDatabase

결과 : mydatabase


2) 대소문자를 구분하려면 명시적으로 인용부호 (") 로 감싸야 한다.


쿼리 : CREATE DATABASE "MyDatabase"

결과 : MyDatabase


3) 그런데,pgAdmin 의 UI 를 사용하여 

데이터베이스(Database), 스키마(Schema), 테이블(Table), 함수(Function) 등을 생성하면, 

항상 인용부호(") 를 자동으로 붙이기 때문에, 

대소문자에 대해서 입력한 대로 반영된다주의!!

Posted by 좋은나무