'프로그램 사용 > postgreSQL' 카테고리의 다른 글
| pgcrypt encrypt() aes cbc ecb 그리고 padding (0) | 2019.11.25 |
|---|---|
| sql TO_CHAR() (0) | 2019.11.23 |
| split_part() 에서 나눠지지 않을 경우 없는 막기 (0) | 2019.11.15 |
| postgres table schema comment 달기 (0) | 2019.11.13 |
| with in sql (0) | 2019.11.11 |
| pgcrypt encrypt() aes cbc ecb 그리고 padding (0) | 2019.11.25 |
|---|---|
| sql TO_CHAR() (0) | 2019.11.23 |
| split_part() 에서 나눠지지 않을 경우 없는 막기 (0) | 2019.11.15 |
| postgres table schema comment 달기 (0) | 2019.11.13 |
| with in sql (0) | 2019.11.11 |
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
| 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 |
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]
| sql where like %와 _ (0) | 2019.11.22 |
|---|---|
| split_part() 에서 나눠지지 않을 경우 없는 막기 (0) | 2019.11.15 |
| with in sql (0) | 2019.11.11 |
| where not in 에서는 null 값을 조심하자 (0) | 2019.11.11 |
| postgres unnest(null)을 조심하자 (0) | 2019.11.10 |
걍.. with 변수명 as (select ...)
하고 쓰면 되네? 일종의 임시 테이블로 쓰이는구나..
| split_part() 에서 나눠지지 않을 경우 없는 막기 (0) | 2019.11.15 |
|---|---|
| postgres table schema comment 달기 (0) | 2019.11.13 |
| where not in 에서는 null 값을 조심하자 (0) | 2019.11.11 |
| postgres unnest(null)을 조심하자 (0) | 2019.11.10 |
| array가 포함된 행을 여러개의 행으로 만들기 (0) | 2019.11.09 |
| postgres table schema comment 달기 (0) | 2019.11.13 |
|---|---|
| with in sql (0) | 2019.11.11 |
| postgres unnest(null)을 조심하자 (0) | 2019.11.10 |
| array가 포함된 행을 여러개의 행으로 만들기 (0) | 2019.11.09 |
| array_agg에서 NULL 없애기 array_remove() (0) | 2019.11.06 |
값을 추적하다 보니 몇개가 사라져서 역으로 찾다보니
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]
| with in sql (0) | 2019.11.11 |
|---|---|
| where not in 에서는 null 값을 조심하자 (0) | 2019.11.11 |
| array가 포함된 행을 여러개의 행으로 만들기 (0) | 2019.11.09 |
| array_agg에서 NULL 없애기 array_remove() (0) | 2019.11.06 |
| drop extension (0) | 2019.11.01 |
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]
| where not in 에서는 null 값을 조심하자 (0) | 2019.11.11 |
|---|---|
| postgres unnest(null)을 조심하자 (0) | 2019.11.10 |
| array_agg에서 NULL 없애기 array_remove() (0) | 2019.11.06 |
| drop extension (0) | 2019.11.01 |
| pgcrypto 사용 예제 (0) | 2019.10.30 |
| 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 |
| postgres unnest(null)을 조심하자 (0) | 2019.11.10 |
|---|---|
| array가 포함된 행을 여러개의 행으로 만들기 (0) | 2019.11.09 |
| drop extension (0) | 2019.11.01 |
| pgcrypto 사용 예제 (0) | 2019.10.30 |
| postgresql 쿼리 수행속도 벤치마크 하기 (0) | 2019.10.30 |
| array가 포함된 행을 여러개의 행으로 만들기 (0) | 2019.11.09 |
|---|---|
| array_agg에서 NULL 없애기 array_remove() (0) | 2019.11.06 |
| pgcrypto 사용 예제 (0) | 2019.10.30 |
| postgresql 쿼리 수행속도 벤치마크 하기 (0) | 2019.10.30 |
| postgresql ctid (0) | 2019.10.29 |
확장기능 설치. 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]
| 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 |