%는 * 의미

_는 ? 의미 로 사용이 가능하다.

[링크 : https://www.w3schools.com/sql/sql_wildcards.asp]

Posted by 구차니

1123.0

이라는 숫자가 있고

1123 이 있는데

split_part(num, '.', 2)를 하면 1123은 0으로 나누어지지만

1123은 ''으로 나오기에 미리 값을 확인하고 null로 case 문 처리 해야 할 듯

 

ASE WHEN version LIKE '%-%'
     THEN SPLIT_PART(version, '-', 2)::int
     ELSE 0 END

[링크 : https://stackoverflow.com/questions/45766644/substituting-value-in-empty-field-after-using-split-part]

'프로그램 사용 > postgreSQL' 카테고리의 다른 글

sql TO_CHAR()  (0) 2019.11.23
sql where like %와 _  (0) 2019.11.22
postgres table schema comment 달기  (0) 2019.11.13
with in sql  (0) 2019.11.11
where not in 에서는 null 값을 조심하자  (0) 2019.11.11
Posted by 구차니

pgadmin 프로그램 버전에서 테이블 클릭시 create table 명령과 함께 구조가 나오는데 거기에 주석을 다는 방법

웹 버전의 pgadmin(윈도우) 에서는 comment를 어떻게 볼수 있는지 모르겠네..

 

 

아무튼 결론

테이블을 만들고 나서 comment on column table.column_name is 'comment' 식으로 달면된다.

create table session_log 

   userid int not null, 
   phonenumber int
); 

comment on column session_log.userid is 'The user ID';
comment on column session_log.phonenumber is 'The phone number including the area code';

 

[링크 : http://lnk2580.blogspot.com/2014/12/db-postgresql-comment.html]

[링크 : https://stackoverflow.com/.../adding-comment-to-column-when-i-create-table-in-postgresql]

 

+

코멘트 없애는건 빈 코멘트를 쓰면된다.

Only one comment string is stored for each object, so to modify a comment, issue a new COMMENT command for the same object. To remove a comment, write NULL in place of the text string. Comments are automatically dropped when their object is dropped.

 

COMMENT ON COLUMN my_table.my_column IS 'Employee ID number';

[링크 : https://www.postgresql.org/docs/9.1/sql-comment.html]

[링크 : http://www.dbatodba.com/db2/db2-comment/]

 

+

테이블 컬럼의 코멘트는 웹 버전보다 리눅스 어플리케이션 버전이 더 보기 편하네?

[링크 : https://dataedo.com/kb/tools/pgadmin/how-to-view-and-edit-table-and-column-comments]

Posted by 구차니

걍.. with 변수명 as (select ...)

하고 쓰면 되네? 일종의 임시 테이블로 쓰이는구나..

[링크 : https://thebook.io/006696/part01/ch07/02/]

Posted by 구차니

null이 하나라도 있으면

and value != NULL 조건이 되어서

정상적으로 걸러지지 않는 듯

[링크 : https://doorbw.tistory.com/222]

Posted by 구차니

값을 추적하다 보니 몇개가 사라져서 역으로 찾다보니

unnest() 안에 들어가는 항목이 null 일 경우에는 (empty array가 아닌 null)

아예 해당 항목 자체가 select 되지 않는 문제가 존재한다.

 

해결법이 맞는진 모르겠지만..

null일 조건 비교해서 두번 선택해야 할지도?

(한번에 선택하는 법이 있으면 좋겠네)..

 

값을 비교해서 unnest 하거나, lateral join을 쓴다는데

lateral join을 아직 모르니.. 일단 값 비교 하는걸로 해야겠다.

(다만, case 에서 multiple row는 리턴하지 못하도록 되어있으니 주의)

[링크 : https://stackoverflow.com/questions/15175187/postgresql-unnest-with-empty-array]

[링크 : https://dba.stackexchange.com/questions/119201/how-does-unnest-treat-null-values-and-empty-arrays]

 

+

SQL 특성(?)인지 당연하게도 해당 내용이 있는지 확인하고

배열이 있으면 해당 배열을 unnest 하고

배열이 없으면 null 배열을 넣어서 처리하도록 하면 해결은 된다..

(null 배열이 아니라 해당 필드가 null 이기 때문에 발생한 경우는 해결 됨)

WITH tbl(id, arr) AS (
   VALUES
     (1, '{a}'::text[])
   , (2, '{NULL}'::text[])
   , (3, '{}'::text[])
   , (4, '{x,y,z}'::text[])
   )
SELECT id, elem
FROM   tbl t
     , unnest (
          CASE WHEN array_length(t.arr, 1) >= 1
               THEN t.arr
               ELSE '{null}'::text[] END
       ) elem;

[링크 : https://dba.stackexchange.com/questions/119201/how-does-unnest-treat-null-values-and-empty-arrays]

Posted by 구차니

sql이 항상 그렇지만.. 간편한 방법은 없고

해당 row에 대한 모든 필드를 적어주고, 늘릴 녀석을 unnest() 해주면 된다.

 

아래 링크는 데이터가 축하게도(!) 2개 뿐이니 select id, unnest(text::text[]) 로 하면 될 것 같지만

여러개면 일일이 다 적어주어야 하잖아? 크앙...

id, text
001, {foo,boo,foo}
002, {"",for,test,friday}
003, {"","",test,friday,tuesday,foo,boo}
SELECT id, txt, count(*) As txt_count
FROM  (
   SELECT id
        , unnest(txt) AS txt
   FROM   tbl
   ) sub
WHERE  txt <> ''
GROUP  BY id, txt
ORDER  BY id, txt;

[링크 : https://stackoverflow.com/questions/24209197/postgres-convert-array-of-elements-to-multiple-rows]

Posted by 구차니

 

SELECT objects.*,
     array_remove(array_agg(tags.tag), NULL) AS tags,
FROM objects
LEFT JOIN taggings ON objects.id = taggings.object_id
LEFT JOIN tags ON tags.id = taggings.tag_id

[링크 : https://stackoverflow.com/questions/31108946/...]

Posted by 구차니
Posted by 구차니

확장기능 설치. database 하위의 extension에 pgcrypto가 추가되며

사용가능한 함수들은 public에 function 에 추가된다.

CREATE EXTENSION pgcrypto;

 

binary 값으로 나오기 때문에 encode와 decode를 이용해서 출력하도록 하는 것으로 보임

-- 암호화

select encode(encrypt(convert_to('홍길동','utf8'),'ENC_KEY','aes'),'hex');

-- 복호화

select convert_from(decrypt(decode('encrypted_value','hex'),'ENC_KEY','aes'),'utf8');

-- 암호화 된 것을 검색하기

select mem_id, convert_from(decrypt(decode(mem_name,'hex'),'ENC_KEY','aes'),'utf8') from tb_test;

[링크 : https://jully215.tistory.com/104]

 

문제는... 암호화하려면 해당 컬럼이 bytea 형식이 되어야 하는 듯?

regress=# create table demo(pw bytea);
CREATE TABLE
regress=# insert into demo(pw) values ( encrypt( 'data', 'key', 'aes') );
INSERT 0 1
regress=# select decrypt(pw, 'key', 'aes') FROM demo;
  decrypt   
------------
 \x64617461
(1 row)

regress=# select convert_from(decrypt(pw, 'key', 'aes'), 'utf-8') FROM demo;
 convert_from 
--------------
 data
(1 row)

[링크 : https://dba.stackexchange.com/questions/24370/how-to-use-aes-encryption-in-postgresql]

 

[링크 : https://www.postgresql.org/docs/9.4/pgcrypto.html]

'프로그램 사용 > postgreSQL' 카테고리의 다른 글

array_agg에서 NULL 없애기 array_remove()  (0) 2019.11.06
drop extension  (0) 2019.11.01
postgresql 쿼리 수행속도 벤치마크 하기  (0) 2019.10.30
postgresql ctid  (0) 2019.10.29
coalesce() / isnull()  (0) 2019.10.29
Posted by 구차니