Database (11) 썸네일형 리스트형 PostgreSQL: Int id 충돌 문제 # auto increasement error # duplicate key value violates unique constraint PostgreSQL에서 int pk를 auto increment (숫자 자동 증가)로 부여하는 경우,종종 존재하는 id로 row를 추가하려는 경우가 있다. 예시 오류SQLSTATE[23505]: Unique violation: 7 ERROR: duplicate key value violates unique constraint "pages_pkey"DETAIL: Key (id)=(4) already exists. -> id auto increment를 마지막 int부터 다시 시작하도록 설정 psql shell을 진입 - 해당 데이터 베이스 사용 (\c database_name) 1.현재 sequence value를 확인하자(참고: table 명이 pages 인 경우이다)SELECT last_value, i.. PostgreSQL: password 안전하게 사용하기 # PGPASSWORD # .pgpass # .env Python에서 프레임워크가 아닌 Script를 통해 sql문을 사용하는 상황에서create table sql을 작성할 때 DB 접근을 위해 PASSWORD가 필요하다. .env에 기록을 해두고 load_dotenv로 사용할 수 있는데,psql command에 .env에서 불러온 password를 넣는 방식은 보안에 취약할 수 있다.비밀번호 등이 명령어 히스토리에 남을 수 있기 때문이다. 예제코드를 통해 살펴보자import subprocessimport osfrom pathlib import Pathfrom dotenv import load_dotenvload_dotenv()def create_table(): db_user = os.getenv('DB_USER') db_name = os.get.. MySQL: root 유저 비밀번호 설정 후에도 shell 접근이 안되는 경우 # auth_socket # mysql_native_password # mysql -u root -p Ubuntu 환경에서 MySQL 설치후,sudo 권한으로 mysql shell에 들어가서 root의 패스워드를 변경하고 나서다시 ubuntu shell에서 mysql -u root -p 명령어로 shell에 접근하려고 하는데, ERROR 1698 (28000): Access denied for user 'root'@'localhost' 위 오류가 발생하며 접근이 안되는 경우가 있다.이럴 경우 프로젝트에서 DB 설정을 통해 접근해도 같은 식으로 접근이 불가하다. sudo 권한으로 다시 mysql shell에 들어가거나sudo mysql위 명령어로 mysql에 접근하자 ( Log in to MySQL using the socket authentication (without a password) ) 그리고 아.. MySQL: max_connections 수정 Check current max_connections:SHOW VARIABLES LIKE 'max_connections'; Changing the maximum number of connections that MySQL can handle involves modifying the max_connections setting. This parameter determines how many concurrent connections MySQL can accept. Here’s how you can adjust this setting, either temporarily or permanently:Temporarily Changing Max Connections1. Via MySQL Command Line:Conn.. MySQL: query log 확인 # table & file OS: ubuntu 22.04 기준 1. my.cnf 설정파일 변경 /etc/mysql/my.cnf 또는 /etc/my.cnf 나는 /etc/mysql/my.cnf에 있었음 아래 설정을 추가한다 더보기 [mysqld] general_log = 1 general_log_file = /path/to/your/logfile.log 로그 파일 대신에 테이블을 생성해서 볼수도 있다. general_log_file 대신에 log_output = TABLE 이용 더보기 [mysqld] general_log = 1 general_log_file = /path/to/your/logfile.log -> mysql database안에 general_log 테이블 생성됨. 여기에 모든 로그가 기록된다. 사이즈 관리 유의 my.. PostgreSQL: query 기록하고 보기 - log파일로 보기 # /var/log/postgresql PostgreSQL에서 postgresql의 log를 봐보자 OS: ubuntu 22.04 기준 linux: 기본적으로 log들은 /etc/log에서 확인 가능 더보기 cd /etc/log/postgresql 위에서 로그들을 볼 수 있다. * 추가적으로 query들을, 자세하게 볼수 있도록 설정해보자 1. postgresql.conf에 아래와 같이 변경 - 대부분 주석 처리가 되있을 것이므로, 주석을 풀어서 기재하자. 없으면 직접 써줘도 된다. 더보기 log_statement = 'all' 위 설정으로 모든 sql statements에 대한 기록을 해주도록 한다고 한다. (주석으로 none으로 되어 있었음) 더보기 log_parameter_max_length = 0 위 설정은 모든 parameter va.. PostgreSQL: query 기록하고 보기 - table(view)로 보기 # ORM # raw query # extension # pg_stat_statements orm으로 query를 작성한 경우, orm이 실제 query로 어떻게 변했는지를 파악하고 싶을 때가 있다. PostgreSQL의 경우 실제 query를 table 형태로 저장해서 보도록 하자 OS: ubuntu 22.04 기준 1. postgresql.conf 에 shared_preload_libraries를 찾아서 주석을 풀고 다음과 같이 적자 ubuntu 기준 기본 postgresql.conf 위치: /etc/postgresql/[VERSION]/main/postgresql.conf 더보기 shared_preload_libraries = 'pg_stat_statements' 2. 쭉 내려서 아래에 다음도 추가 더보기 pg_stat_statements.track = all pg_stat_stateme.. DB Table 모두 지우고 리셋 # schema DB의 schema schema란 데이터베이스의 구조, 제약조건에 관한 전반적인 명세를 기술한 메타데이터의 집합 메타데이터? 일반적으로 저장될 데이터를 아울러서(초월해서) 적용될 데이터. DB에서는 모든 테이블들에 적용될 데이터(Rule)라고 보면 됨 - 쉽게 말해서 어떤 테이블의 필드를 Date값으로 받을지, Boolean 값으로 받을지 등의 조건을 명세한 데이터의 집합 -> 이러한 메타데이터의 집합이 그 DB의 Rule이 된다. -> Rule에 위반되는 데이터는 받을 수 없다고 보면 도니다. Rule에 위반되는 데이터는 입력을 받을 수 없다. 따라서 이미 규정한 schema와 다른 형태로 DB에 마이그레이션 해야할 때 Rule이 달라서 안되는 경우가 있다. DB의 데이터들을 날려도 되는 경우라면, 간.. 이전 1 2 다음