일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- mysql
- BOJ
- Codeforces
- 딕셔너리
- timestamp
- SUM
- flask
- 외래키
- Dictionary
- SUM()
- floor
- itertools
- python
- 네이밍
- 2557
- 소수
- convention
- lower_case_table_names
- FOREIGN KEY
- 큰 수 나누기
- 에라토스테네스의 체
- 자료구조
- 파이썬
- datetime
- 리스트 컴프리헨션
- list comprehension
- ceil
- 세그먼트 트리
- enumerate
- project euler
- Today
- Total
늒네 기록
[postgresql] 칼럼 순서 바꾸기 본문
mysql을 쓸때와 또 달랐던 점은, 한 번 만들어놓은 칼럼들이 순서가 마음에 안 들어서 바꾸려고 했더니 pgadmin 페이지에서 방법이 바로 제공되지 않는 것으로 보였던 것이다.
그래서 구글링을 해봤더니, 흥미로운 글을 찾을 수 있었다.
http://wiki.postgresql.org/wiki/Alter_column_position
첫 번째 링크가 사실상 두 번째 링크의 요약본이다. 한국어로 간단히 정리하면 아래와 같다.
"Postgres는 pg_attribute 테이블의 attnum 칼럼에 다른 테이블들의 칼럼 순서를 정의해두므로, 테이블의 칼럼 순서를 바꾸기 위해서는 1) 새로 테이블을 만들거나, 2) 테이블에 새 칼럼들을 만들고 데이터를 옮기고 기존 칼럼들을 지우거나, 3) 뷰를 활용해서 기존 테이블의 칼럼 순서가 어찌 되든 신경쓰지 않으면 된다."
두 번째 링크 초장에 postgres에서 칼럼 순서를 변경할만한 이유는
- 크기가 고정된 칼럼들을 앞쪽에 배치해서 물리적 공간 활용을 최적화하거나
- 시각적으로 보기 편하도록 칼럼들을 배치하기 위해서
라고 써있는데, 첫 번째 이유를 달성하는 것이 목적이라면 뷰를 활용하는 것이 궁극적인 답은 아닐 것이라는 생각이 들었다. 유사한 맥락에서, 두 번째 링크 마지막 파트에서는 아래와 같은 이야기를 한다.
"... it would also be desirable for postgres to automatically order columns physically for optimum layout, regardless of the logical order they are given in. ..."
즉, 칼럼의 논리적 순서는 논리적 순서대로 두고, 물리적 순서는 공간 활용에 최적이 되도록 알아서 postgres에서 관리하면 좋지 않겠냐는 말. 하지만 이러한 기능 구현에 걸림돌이 되는 것에 대한 내용이 이어지는데,
"...The current problem with implementing this lies in that currently postgres uses the same identifiers for both the logical and physical position within a table. The current hot plan for solving this would be to change the system to reference three identifiers... a permanent identifier for the column, as well as a separate logical and physical identifier. ..."
postgres 구조상 logical, phyical 위치를 정하는 데에 같은 id를 사용하고 있다는 것이 문제. 이를 해결하기 위해 칼럼들마다 영구적으로 쓸 수 있는 칼럼 id를 부여하고, 물리적 순서와 논리적 순서를 결정하는 id를 분리하는 방법을 쓸 수 있지 않을까 하는 제안이 있었다고 하는데,
https://www.postgresql.org/message-id/20414.1166719407@sss.pgh.pa.us
이 링크를 보면 이런 제안이 오간 것이 2006년으로 14년 전의 이야기다. 지금은 어떻게 흘러갔을지 모르겠다.
처음에 "Postgres는 pg_attribute 테이블의 attnum 칼럼에 다른 테이블들의 칼럼 순서를 정의해둔다"는 이야기가 있었는데, 그렇다면 attnum 칼럼의 내용물만 바꿔치기하면 칼럼 순서를 바꿀 수 있지 않을까 하는 생각을 할 수도 있겠다.
https://www.postgresql.org/message-id/1181138388.508384.51110%40q75g2000hsh.googlegroups.com
위의 링크에서 이 실험을 실제로 해본 것에 대한 내용이 이어지는데, 4번째 스레드에 아래와 같은 말이 나온다.
"I had tried it with data in the table and it seemed to work, but it does mess up views referencing the table. So, no go."
즉, 칼럼 순서를 바꾸는 데에는 성공했지만, 테이블에 레퍼런스를 두고 있는 뷰들이 엉망진창이 되었다는 이야기. pg_attribute 테이블이 어떤 기능을 하고, 어떤 칼럼들이 어떻게 엮여있는지 추후에 더 살펴볼만 하겠다는 생각이 들었다.
'DB 공부 기록 > postgresql' 카테고리의 다른 글
[postgresql] json 필드에 작은 따옴표가 있을때 insert하기 (0) | 2020.11.21 |
---|---|
[postgresql] mysql의 auto increment 기능과 유사한 serial (0) | 2020.10.03 |