Database 122

[MySQL] 순위 함수 (RANK)

개요 MySQL 8.0부터는 Window 함수를 지원하면서 보다 편리하게 순위를 매길 수 있게 되었다. 순위 함수는 Window 함수 중 비집계 함수이며 OVER 절과 함께 사용해야 한다. MySQL에서 지원하는 순위함수는 RANK, DENSE_RANK, PERCENT_RANK, ROW_NUMBER 정도가 있다. 예시 데이터를 이용해 순위 함수의 사용 방법을 정리한다. 예시 데이터 아래의 사원 번호(empno), 사원 이름(ename), 직업(job), 급여(sal) 데이터로 구성된 테이블을 예시로 사용한다. DDL 더보기 CREATE TABLE emp ( empno int, ename varchar(30), job varchar(30), sal int ) INSERT INTO emp VALUES (79..

Database 2023.05.16

[MySQL] 집계 함수와 OVER 절

개요 2022.06.10 - [MySQL] MAX, MIN, COUNT, DISTINCT와 2023.05.14 - [MySQL] 윈도우 함수 - OVER 글에서 집계 함수와 윈도우 함수에 대해서 간단히 알아보았다. 이 글에서는 집계 함수와 OVER 절을 함께 사용하는 예시에 대해 알아보려고 한다. MySQL을 기준으로 확인해본다. 집계 함수 MySQL에서 제공하는 집계 함수는 다음과 같다. (참고 : 12.19.1 Aggregate Function Descriptions) 이름 설명 AVG() 인수의 평균값을 반환 BIT_AND() 반환 비트 AND BIT_OR() 반환 비트 OR BIT_XOR() 비트별 XOR 반환 COUNT() 반환된 행 수를 반환합니다. COUNT(DISTINCT) 다양한 값의 수..

Database 2023.05.15

[MySQL] 윈도우 함수 - OVER

윈도우 함수 (Window Function) 행과 행 간의 관계를 정의하기 위해 제공되는 함수이다. 데이터베이스를 다룰 때는 GROUPY BY와 COUNT, SUM과 같은 집계 함수를 많이 사용하는데, 윈도우 함수도 GROUP BY와 비슷하게 데이터를 그룹화하여 순위, 합계, 평균 등을 구할 수 있다. 다만 집계된 결과만 보여주는 GROUP BY와 다르게 기존 데이터에 집계된 데이터를 추가하여 보여준다. 즉, GROUP BY는 결과 데이터의 행 수가 줄어드는 반면 윈도우 함수를 사용하면 결과 데이터 행 수가 줄어들지 않는다. MySQL의 경우 8.0부터 윈도우 함수를 지원한다. 이 글에서는 간단히 윈도우 함수의 구조와 사용 예시를 정리한다. 구조 윈도우 함수는 아래와 같은 구조로 사용한다. FUNCTIO..

Database 2023.05.14

[MySQL] 실행 중인 프로세스 kill

개요 RDS burstbalance가 0으로 떨어져서 원인 파악을 확인하는 과정에서 장시간 실행 중인 것으로 의심되는 쿼리가 있었다. 확인해 보고 정리하고자 한다. 실행 프로세스 확인 현재 실행 중인 프로세스의 목록과 상태를 확인한다. SHOW processlist; -- 전체 쿼리 보기 SHOW FULL processlist; 참고 : 2021.11.08 - [MySQL/MariaDB] 프로세스 목록 확인 의심하고 있던 쿼리가 실행 중인 상태인 것을 확인할 수 있었다. 프로세스 종료 실행 프로세스를 종료시키는 방법은 리눅스 프로세스 종료와 비슷하게 kill 명령어를 사용한다. kill -- 예시 kill 16644247 프로세스가 정상적으로 종료됐는지 확인한다. 참고 문서 https://hosim.ti..

Database 2023.04.24

[PostgreSQL] psql - 메타 명령어

메타 명령어 PostgreSQL 클라이언트인 psql은 데이터베이스 관리 및 스크립트 작성에 유용한 메타 명령어를 제공한다. 백슬래시(\)로 시작하기 때문에 슬래시 명령, 백슬래시 명령이라고 부르기도 한다. 이 글에서는 자주 사용하는 메타 명령을 정리한다. 데이터베이스 목록 확인 서버 내 데이터베이스 이름, 소유자, 캐릭터 셋, 접근 권한을 출력한다. \l[+] or \list[+] [ pattern ] 명령에 +를 추가하면 데이터베이스의 용량, 기본 테이블스페이스와 설명도 출력된다. 용량 정보는 사용자가 연결할 수 있는 데이터베이스만 표기된다. 데이터베이스 연결 선택한 데이터베이스에 접속한다. 데이터베이스 접속 시 접속할 사용자 정보를 지정할 수 있다. \c or \connect [ -reuse-pre..

Database 2023.04.11

[Ubuntu/PostgreSQL] 서버 원격 접속 허용

개요 PostgreSQL도 MySQL과 동일하게 기본적으로 localhost 접속만을 허용한다. (사실 거의 대부분의 애플리케이션이 그런 것 같다.) 2023.03.25 - [MySQL/MariaDB] 서버 원격 접속 허용 때와 마찬가지로 PostgreSQL 원격 접속 설정 방법을 정리해 둔다. Ubuntu 20.04 LTS, PostgreSQL 12 버전 기준으로 정리한다. Listen Address 설정 기본적인 PostgreSQL 파라미터 설정 파일인 postgresql.conf을 변경한다. 경로는 아래와 같다. /etc/postgresql//main/postgresql.conf 확인하면 listen_addresses 값이 주석 처리되어 있는 것을 확인할 수 있다. 주석을 해제하고 아래와 같이 설정..

Database 2023.04.07

[Ubuntu] PostgreSQL 설치 및 실행

PostgreSQL 오픈 소스 객체 관계형 데이터베이스 관리 시스템 (object-relational database management system; ORDBMS). 미국 캘리포니아에 있는 버클리 대학 컴퓨터 과학부에서 개발한 POSTGRES, Version 4.2를 기반으로 개발되었다. 북미와 일본에서 인지도가 높은 데이터베이스 시스템으로 기능적인 면에서는 Oracle과 유사한 점이 많다. 유연한 객체 생성, 상속, 함수를 지원하는 것이 특징이다. 포스트그레스큐엘로 발음하면 된다. 이전에는 Postgres라고 불렀지만 표준 SQL을 지원하면서 이름에 SQL을 덧붙인 것으로 공식적인 명칭은 post-ingres 데이터베이스다. 💡 객체 관계형 데이터베이스 관리 시스템 (ORDBMS) 객체지향 데이터베이..

Database 2023.04.04

[MySQL] CHECK TABLE - 테이블 상태 확인

CHECK TABLE View DDL에서 존재하지 않는 테이블을 참조하는 등의 문제를 가진 테이블이 있는지 확인한다. 확인할 테이블에 대한 권한이 있어야 CHECK 명령을 수행할 시 있다. 개발자보다는 DBA가 주로 사용하는 명령어지만, DB 업그레이드 사전 작업 중 확인 요청이 와서 정리한다. SQL CHECK TABLE tbl_name [, tbl_name] ... [option] ... option: { FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED } 옵션은 다음과 같다. FOR UPGRADE : 테이블이 현재 MySQL 버전과 호환되는지 확인한다. QUICK : 잘못된 링크를 확인하기 위한 행 스캔 금지 FAST : 적절히 CLOSE 되지 ..

Database 2023.04.03

[MySQL] View 목록 확인

개요 2021.09.17 - [MySQL] View에서 View의 개념과 생성, 삭제, 수정 방법은 정리했었다. 정작 목록을 확인하는 방법을 적어두지 않아 정리한다. 1. SHOW FULL TABLES SHOW FULL TABLES IN WHERE table_type LIKE 'VIEW'; FULL 키워드를 붙이지 않으면 table_type 컬럼이 없어 조회되지 않는다. 2. SELECT ~ FROM information_schema SHOW FULL TABLES 명령과 달리 모든 데이터베이스 내에 존재하는 View 목록을 확인할 수 있다. SELECT table_schema, table_name, table_type FROM information_schema.TABLES WHERE table_type ..

Database 2023.04.02

[MySQL/MariaDB] 서버 원격 접속 허용

개요 AWS EC2에 MySQL 서버를 설치하고 다른 서버에 접속을 시도했다. EC2에 적용한 보안 그룹은 아웃바운드와 인바운드 모두 허용되어 있고 MySQL 서버도 실행 중이고, 접속을 시도한 계정은 모든 대역의 IP를 허용하고 있었다. 하지만 접속이 되지 않았다……. telnet 연결조차 되고 있지 않은 상태다. 원인 MySQL은 기본적으로 localhost의 연결만 수신하기 때문에 같은 서버 내에서만 접근할 수 있다. 원격 접속이 필요하다면 아래 두 가지 방법 중 하나를 선택할 수 있다. SSH 터널을 통한 접속 MySQL 서버가 원격 연결을 허용하도록 구성 이 글에서는 MySQL 서버가 원격 연결을 허용하도록 구성해보려고 한다. MySQL 서버 구성 변경 MySQL 서버와 클라이언트가 전용 네트워..

Database 2023.03.25