라벨이 postgresql인 게시물 표시

Django + Postgresql에서 duplicate key value violates unique constraint 오류

0. 환경 - Python 3.7 - Django 1.11 - Postgresql 9.6 Django 관리자 페이지에서 row를 추가하려니 "duplicate key value violates unique constraint"오류가 발생했다. http://searene.me/2016/01/10/django-db-utils-IntegrityError-duplicate-key-value-violates-unique-constraint/  이 페이지 참조해서 sequence를 바꿔주었다. 1. 데이터베이스 접속   \list로 데이터 베이스 이름 확인 후 \connect [데이터베이스이름] 으로 수정할 데이터베이스에 접속한다. 2. id 최댓값 확인   sequence의 마지막 값(=해당 테이블의 마지막 id)는 아래 명령어로 확인할 수 있다. SELECT last_value FROM [sequence이름]; sequence이름은 보통 [테이블이름]_id_seq이고, django에서 만들어주는 테이블 이름은 [앱이름(소문자)]_[모델이름(소문자)]이니까 보통은 [앱이름]_[모델이름]_id_seq로 찾으면 된다. 처음 테이블을 만든 후 모델이름을 수정해도 sequence이름까지 바뀌진 않으니 아래 명령어로 정확히 확인해보자. SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'; sequence의 last_value가 해당 테이블의 마지막 id가 아니면 sequence를 수정해야 한다. 3. sequence 수정 ALTER SEQUENCE [sequence이름] RESTART WITH [마지막id+1];

Postgresql -> Postgresql migrations

0. 환경 - Postgresql 9.6 - Django 1.11 - AWS RDS - ubuntu 16.04 1. 상황 - AWS RDS + postgresql의 데이터만 개인서버 + postgresql로 이전해야 함 - 개인 서버에 테이블은 이미 만들어져 있음 2. 데이터 이전 2-1) [시도 1] 전체 pg_dump (logical dump) (개인서버에서) 2-1-1) sql로 데이터 복사 붙여넣기 --file=FILEPATH --column-inserts --data-only --host=HOST --port=5432 --username=USERNMAE psql DATABASENAME < FILEPATH => foreign key constraint 때문에 insert가 안되는 문제 발생 2-1-2) foreign key constraint를 무시할 수 있는가? SET session_replication_role = 'replica'; 로 trigger를 끌 수 있다 하여 시도하였으나 실패 (참조:  https://stackoverflow.com/questions/38112379/disable-postgresql-foreign-key-checks-for-migrations ) [시도 2] 전체 pg_basebackup (physical dump) RDS 서버에서 replication 권한이 있는 사용자를 생성할 수 없었고 보안 문제로 실패 (참조 :  https://idchowto.com/?p=44332 ,  https://severalnines.com/blog/become-postgresql-dba-logical-physical-postgresql-backups ) [시도 3] 테이블별 pg_dump (O) 어쩔 수 없이 테이블 별로 dump 후 최대한 foreign key를 참조하지 않는 순서대로 insert했다. 3. Django...

Postgresql에서 5432 port가 열려있냐는 문제(Ubuntu 기준)

1. 에러 각종 서비스에서 5432 port가 열려있느냐를 묻는 에러가 발생한다. django는 이런 식. Is the server running on host XXX and accepting TCP/IP connections on port 5432? 어쨌든 connection이 안되면 서비스가 실행되는지, port가 열려있는지 확인해보는게 좋다. 2. 확인 1) htop 에서 postgresql이 있는지 본다. 혹은 ps -el. 2) netstat -ntl로 5432가 열려있는지 본다. 3) service postgresql status로 서비스가 active 상태인지 본다. 3. 해결방법 1) postgresql이 실행되어 있지 않다. sudo service postgresql start. 2) 5432 port가 열려있지 않다. - /etc/posgresql/VERSION/main/pg_hba.conf에서 # IPv4 local connections 아래   host    all             all             0.0.0.0/0           md5 를 추가(혹은 수정) - 외부에서 접속하는 경우 방화벽이 막혀있는 경우가 있다. 열어도 되는 서버라면   iptables -I INPUT 1 -p tcp --dport 5432 -j ACCEPT   iptables -I OUTPUT 1 -p tcp --dport 5432 -j ACCEPT AWS EC2는 EC2 콘솔에 가서 열어야 하는 것 같다. 3) 실행도 되어있고 port도 열려있다. 이전 실행에서 비정상적으로 종료된 경우가 가끔 있다. /var/lib/postgresql/VERSION/main/pos...