Database 88

[Redis] Pub/Sub - 테스트

개요2024.07.30-[Redis] Pub/Sub 개념에서 Publish, Subscriber 개념에 대해 적어두었었다. 이 글에서는 redis-cli를 사용해 직접 테스트를 해보자. 테스트를 하기 위해서는 먼저 Redis가 있어야 한다. 2023.05.30-[Redis] 개념 및 설치/실행을 참고하여 설치한다.또한 Publisher, Subscriber가 필요하므로 redis-cli를 각각 다른 세션에서 실행하여 테스트한다.   관련 명령어Publish, Subscribe와 관련된 명령어는 다음과 같다. 명령어설명subscribe  채널을 구독하여 메시지를 수신받는다.한 번에 여러 채널을 구독할 수 있다.publish 메시지를 채널에 송신한다.pubsub서버에 등록된 채널이나 패턴을 조회한다.psu..

Database 2024.08.21

[Redis] Pub/Sub 개념

개요이전에 2023.05.30-[Redis] 개념 및 설치/실행, 2023.06.01-[Redis] redis-cli로 데이터 읽고 쓰기 등으로 Redis에 대한 간략한 개념이나 데이터를 읽고 쓰는 방법에 대해 적어두었었는데, 최근 다시 Redis를 사용한 개발을 수행하게 되었다.관련하여 Pub, Sub라는 개념을 접하게 되어 적어둔다.  Pub/SubPub, Sub란 Publish, Subscribe의 줄임말로 Message Queue를 통해 데이터를 교환하는 방법 중 하나이다.Publish, Subscribe는 특정 주제(Topic)에 대해 구독한 수신자 모두에게 메시지를 발행하는 통신 방법이다. 즉, 하나의 클라이언트가 특정 Topic에 메시지를 Publish 하면, 해당 Topic에 연결되어 있는..

Database 2024.08.20

[PostgreSQL] DATABASE 강제 DROP

개요 Database를 복구하다가 문제가 생겼었는데, 복구한 데이터베이스를 지우고 다시 복구하려고 한다. 그런데 DATABASE에 연결한 사용자가 있어 DROP에 실패했다. 강제로 DATABASE를 삭제하는 방법을 적어둔다. DROP DATABASE 데이터베이스를 삭제할 때는 DROP 문을 사용한다. DROP 문은 되돌릴 수 없기 때문에 신중하게 사용해야 한다. DROP DATABASE db_name DROP DATABASE IF EXISTS db_name IF EXESTS를 사용하면 삭제할 데이터베이스가 존재하지 않아서 발생하는 오류를 방지할 수 있다. 데이터베이스 강제 삭제 삭제를 수행하는 사용자가 삭제할 데이터베이스를 사용하고 있는 경우도 포함해서, 삭제하려고 하는 데이터베이스에 연결된 세션이 있으..

Database 2024.01.11

[PostgreSQL] 사용자 비밀번호 변경

개요 PostgreSQL 데이터베이스 전체 덤프를 복원하는 중, 데이터베이스의 기본 사용자인 postgres 계정의 비밀번호가 변경되었다. 변경된 비밀번호를 원래 값으로 원복하려고 한다. 방법을 정리해둔다. ALTER psql로 superuser 권한을 가진 계정에 접속한 뒤, ALTER문을 이용해 비밀번호를 변경한다. psql -U postgres ALTER USER WITH PASSWORD ''; 다만 ALTER 문으로 비밀번호를 변경하면 히스토리 등에 의해 변경한 비밀번호가 남아있을 수 있으니 주의해야 한다. \password psql로 superuser 권한을 가진 계정에 접속한 뒤, 메타 명령어 \password를 이용해 비밀번호를 변경한다. psql -U postgres \password 비밀..

Database 2024.01.04

[PostgreSQL] pg_dumpall - 데이터베이스 백업/복원

개요 PostgreSQL 데이터베이스 내 데이터 전체를 백업하고 복원해야 할 일이 있어 방법을 정리해 둔다. 백업 pg_dumpall은 데이터베이스 클러스터 전체 내용을 덤프 하는 프로그램으로, 클러스터의 각 데이터베이스를 백업하고 role, tablespaces와 같은 클러스터 전체 데이터도 저장한다. 기본 사용법은 아래와 같다. pg_dumpall > pg_dumpall -f pg_dumpall -U -f # 예시 pg_dumpall -U postgres > dumpall_superset_postgres.sql pg_dumpall은 role, tablespaces, 빈 데이터베이스를 재생성하는 명령어를 내보낸 후, 각 데이터베이스에 대한 pg_dump를 호출하는 방식으로 동작한다. 결과 파일은 SQL..

Database 2023.12.29

[PostgreSQL] 사용자 목록 확인

개요 PostgreSQL에서 사용자 목록과 권한을 확인하는 방법을 정리해 둔다. psql 메타 명령어 psql 메타 명령어 \du는 사용자명, 사용자에게 부여된 권한과 소속 그룹 정보를 확인할 수 있다. \du 출력에서 확인할 수 있는 기본 권한(role) 목록은 다음과 같다. 권한 설명 SUPERUSER 데이터베이스에 대한 모든 작업을 허용하는 관리자 권한 CREATEDB 데이터베이스 생성 가능 CREATEROLE 신규 역할 생성 가능 REPLICATION 데이터베이스 복제를 위한 역할. 꽤 높은 권한을 가지고 있어 복제 용도로만 사용하는 것을 권장한다. BYPASSRLS Row 수준 보안 정책 통과 가능. 테이블 덤프 등의 작업 제한용 SQL 데이터베이스 사용자에 대한 정보를 저장하는 PG_USER ..

Database 2023.12.28

[MySQL] 별칭 (Alias)

개요 SQL에서 테이블이나 컬럼에 대해 별칭을 지정하여 간단히 참조할 수 있다는 건 데이터베이스를 알고 있는 사람에게는 기본적인 지식이라고 할 수 있다. 하지만 나는 SELECT나 FROM 절 외의 다른 절에서도 참조할 수 있다는 걸 잘 기억하지 못하기 때문에 굳이 적어둔다. 별칭 SELECT 문에서는 키워드 AS를 사용해 별칭을 부여할 수 있다. 별칭은 표현식의 컬럼 이름이나 GROUP BY, ORDER BY, HAVING 절 등에서 사용할 수 있다. SELECT FLOOR(PRICE / 10000) * 10000 AS PRICE_GROUP, COUNT(1) AS `PRODUCTS` FROM PRODUCT GROUP BY PRICE_GROUP ORDER BY PRICE_GROUP 별칭은 컬럼 뿐만 아니..

Database 2023.12.20

[MySQL] 집계 함수 ALL, ANY 구현

개요 Python에는 여러 데이터에 대한 참, 거짓을 판단할 때 사용할 수 있는 all, any 함수가 존재한다. 참고 : 2022.10.08 - [Python] any/all - 여러 요소의 참/거짓 확인 비슷한 방식으로 MySQL에서 SQL을 이용해 그룹 별 여러 데이터에 대한 참, 거짓을 판단하고 싶다. 방법을 알아보자. 참고로 Subquery로 제공되는 ALL, ANY가 아니다. 예시 테이블 | month | day | amount | | ----- | --- | ------ | | 1 | 3 | 9000 | | 1 | 5 | 8000 | | 3 | 15 | 20000 | | 6 | 14 | 110123 | | 6 | 18 | 3000 | | 12 | 20 | 101000 | | 12 | 25 |..

Database 2023.11.20

[MySQL] INSERT ~ ON DUPLICATE KEY UPDATE (insert or update)

UPSERT UPDATE, INSERT의 합성어로, 테이블에 추가하고자 하는 데이터의 기준 값이 데이블에 없으면 데이터를 추가하고 있으면 데이터를 갱신하는 것을 의미한다. 즉, INSERT OR UPDATE라고 할 수 있다. 데이터베이스 엔진마다 지원 여부와 문법이 다른데, MySQL은 INSERT ~ ON DUPLICATE KEY UPDATE 문으로 지원한다. INSERT ~ ON DUPLICATE KEY UPDATE INSERT INTO table(key1, key2, col1, col2) VALUES(val1, val2, val3, val4) ON DUPLICATE KEY UPDATE col1 = val3, col2 = val4; INSERT문에 ON DUPLICATE KEY UPDATE을 지정하면..

Database 2023.11.16

[MySQL] SELECT FOR UPDATE

개요 하나의 트랜잭션 내에서 데이터를 쿼리 한 후 관련 데이터를 삽입하거나 갱신하는 경우, 일반적인 SELECT 문은 충분한 보호를 제공하지 않는다. 쿼리 한 데이터와 동일한 데이터를 다른 트랜잭션에서 갱신하거나 삭제할 수 있기 때문에 추가적인 안정성이 필요하다. SELECT FOR UPDATE는 이러한 동시성 문제를 해결하기 위해 InnoDB가 제공하는 locking read 방법 중 하나다. Locking Read InnoDB 테이블에 대해나 잠금 작업을 수행하는 SELECT 문이다. SELECT ~ FOR UPDATE 또는 SELECT ~ LOCK IN SHARE 문 두 가지가 해당된다. locking read는 교착 상태를 발생시킬 수 있으므로 사용에 주의해야 한다. SELECT FOR UPDAT..

Database 2023.10.24
1 2 3 4 5 ··· 9