2018년 2월 28일 수요일

postres role, database, table생성

비슷한거같으면서도 달라서 많이 햇깔리기때문에 작성..

Role 생성
Create Role <RoleName> <option >

eg)
create role <testRole> superuser;

options are here

database 생성
create database <databaseName> owner <userId> encoding 'UTF-08'

활성중인 database 내의 모든 table 보기
\dt

table 생성
동일

2018년 2월 11일 일요일

Postgres - pgAdmin 문제점? + varchar 사용을 위한 삽질 후기

처음 postgres 를 사용해 보려고 하는데, 기존에 제공하는 SQL관리 툴인 pgAdmin을 사용해 보려고 했는데, 겪었던 몇가지 문제를 적어보려고 합니다.

1. datatype varchar는 어디에..?
https://www.postgresql.org/docs/9.5/static/datatype.html
가 공식 postgres 의 문서인데, varchar의 기능을 담당하는 데이터 타입을 찾아보았고,


(문제의 데이터타입. 설명을 읽어보니 varchar가 맞다 싶어서 character varyin[(20)] 으로 시도하였습니다)

character varying[(n)] 이 맞는거 같았기 때문에, 시도를 해보았지만 계속해서 문제가 생겼다.

여기서 나타난 또 다른 문제인

2.pgAdmin에서는 query문에 syntax error를 출력하지 않는다?

하도 말이 안되서 검색을 때려봤고, 같은 증상을 겪는 사람들이 몇명이 있다는것을 알아냈습니다.

(하지만 제시한 해결법은 모두 작동하지 않았습니다... 그런고로 이부분은 해결책을 좀 더 찾아봐야 할 것 입니다.)

웹 검색중, pgAdmin에서 table작성을 할 경우에는 작동하지 않지만, sql shell 에서는 작동이 된다는 증상을 본적이 있었기 때문에 

이즈음에서 짚히는게 pgAdmin 의 문제로 인해 varchar의 입력이 안되는것이 아닐까?

라는 의문을 갖게되었습니다.

그리하여 sql shell로 작성을했으나, 여전히 에러를 뱉는데, 구문을 array로 받을 수 없다는 엉뚱한 소리만을 하기 시작합니다.

(??)

이제 드디어 데이터타입이 문제가 아닌가 하여 웹서핑을 하던중 어처구니없는 사실을 찾았습니다.
데이터타입인 character varying 은 배열로도 받을 수 있으며, 단일 varchar로도 받을 수 있다는 것;;
완전히 잘못이해하고 datatype을 이용하려고 했습니다

그럼 어떻게 해야올바른 varchar타입인가? 라고하면

character varying(n) 이 올바른 방법입니다.

배열은 그럼 어따쓸까? 라는 자문을 했고, json타입을 기본으로 받을 수 있는 환경에서는,  쉽게 값을 쓸수 있지 않을까 라는 생각이 들었습니다.
응용은 조금 더 시도 해 봐야겠지만, array형식의 datatype도 선언과 사용법을 알아보았습니다.

character varying(n)[]
최대 n개의 문자열을 받는 array를 뜻하며,
insert test (arrayVarchar) values('{"a","b","c"}');
방식으로 입력 할 수 있었습니다.