Postgresql Idle in transaction
2024. 3. 14. 18:10
데이터 엔지니어링/Database
다음 명령어를 통해 postgresql 의 활성화되어있는 프로스를 확인해보면 Idle in transaction 상태가 보인다. select * from pg_stat_activity; 찾아보니 이런 경우는 postgresql 에 transaction 이 잡혀있지만 아무런 동작도 하지 않으면 idle in transaction 상태가 된다고 한다. 이런 경우가 많이 발생하게 되면 connection 은 잡고있지만 아무것도 하지 않게 되어 리소스가 낭비된다. 이러한 문제를 해결하는 방법 중 하나는 다음과 같이 수동으로 해당 프로세스의 connection 을 terminate 해주어야 한다. terminate 를 할 때에는 process id 인 pid 를 가져와 terminate 를 실행하면 된다. sel..
Postgresql auto increment 적용하기
2024. 2. 16. 19:13
데이터 엔지니어링/Database
Mysql 에서는 auto_increment 라는 속성을 부여해주면 자동으로 증가하게 만들어줄 수 있다. Postgres 에서는 auto_increment 라는 속성을 부여할 수 없기 때문에 다른 방법을 통해서 증가하게 만들어주어야 한다. 그래서 postgres 의 auto increment 에는 어떤 방법들이 있는지 정리해보려고 한다. Sequence 객체를 사용해서 auto increment 하기 postgres 에는 Sequence 라고 하는 number generator 가 있다. 더 쉽게 말해서 순차적인 값을 생성해주는 객체라고 생각하면 된다. Sequence 는 다음과 같이 명령어를 통해 생성할 수 있다. CREATE SEQUENCE seq_user_id INCREMENT 1 START 1 M..
Postgresql 컬럼 기본값(default) 설정
2023. 10. 5. 23:38
데이터 엔지니어링/Database
PostgreSQL 에서 컬럼을 설정할 때 기본값(default) 에 대해서 정리해보려고 한다. 기본값 (default) 이란 PostgreSQL 에서 컬럼의 Default 는 해당 컬럼에 데이터를 삽입할 때 명시적으로 값을 제공하지 않을 때 사용되는 기본값을 정의하는데 사용된다. 쉽게 말해서 어떠한 동작을 하지 않을 때 기본적으로 Default 에 명시된 값이 들어간다는 말이다. 예를 들어 Default 는 다음과 같이 설정할 수 있다. CREATE TABLE test_table ( id serial PRIMARY KEY, name VARCHAR(255) DEFAULT '아무개' ); name 에 아무런 값을 등록하지 않으면 '아무개' 라는 값이 들어가게 된다. 그리고 Default 는 다음과 같이 수..
Postgresql 과 MySQL 비교
2023. 8. 10. 21:46
데이터 엔지니어링/Database
stackoverflow developer Survey 2023 에서 개발자들 사용하는 데이터베이스에 대해서 투표한 결과를 보게 되었다. https://survey.stackoverflow.co/2023/ Stack Overflow Developer Survey 2023 In May 2023 over 90,000 developers responded to our annual survey about how they learn and level up, which tools they're using, and which ones they want. survey.stackoverflow.co 투표 결과를 확인해보니 대략 7만 5천명의 개발자분들이 투표해주셨고 그 결과는 다음과 같았다. 전체 결과를 확인해보니 Po..
Mysql OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction') 에러 발생
2023. 7. 6. 11:05
데이터 엔지니어링/Database
Mysql 에서 Insert 하는 과정에서 다음과 같이 에러가 발생했다. OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction') 메시지를 보면 알 수 있듯이 트렌젝션의 수행시간이 초과되면 Lock 이 걸리는 것을 알 수 있다. 만약 트랜젝션의 수행시간이 길다면 나누어서 실행하는 게 좋을 것 같다. 해결 방법은 다음과 같다. mysql root 계정으로 접속한다. mysql -uroot -p 다음과 같이 timeout 값을 확인해볼 수 있다. select @@innodb_lock_wait_timeout; 확인해보면 아래와 같이 innodb_lock_wait_timeout 의 값이 50초로 되어있는 것을 확인할 수 ..
Mysql 8 버전 Sequal Pro 접속 에러
2023. 4. 14. 10:58
데이터 엔지니어링/Database
도커로 Mysql 8 버전을 설치하고 Sequal Pro 에서 접속하려고 하니 다음과 같은 에러가 발생했다. 이 문제의 원인은 Mysql 8버전부터는 비밀번호의 암호화 방식이 달라져서 생기는 문제라고 한다. 그래서 Sequal Pro 에서는 변경된 암호화 방식이 적용되지 않아 문제가 발생한 것으로 보이고 DBeaver 에서는 정상적으로 접속이 되는 것을 확인할 수 있었다. 만약 sequel pro 를 써야한다면 다음과 같이 2가지 방법을 통해서 해결할 수 있다고 한다. mysql 접속 후에 root 계정의 패스워드를 mysql_native_password 방식의 비밀번호로 변경해준 후에 사용할 수 있다고 한다. 다음과 같이 예를 들어 사용해볼 수 있다. ALTER USER 'admin'@'%' IDENT..
Mysql - ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
2023. 3. 8. 12:44
데이터 엔지니어링/Database
mysql 을 유저와 패스워드 없이 접속할 때 다음과 같은 에러가 발생한다. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 하지만 다음과 같이 유저와 패스워드를 입력해서 접속하면 정상적으로 접속되는 것을 확인할 수 있다. 물론 접속할 수 있는 방법은 있다. 패스워드를 제거해주면 된다. 다만, 실제 서비스에서는 보안상 위험하기 때문에 유저를 별도로 생성해 유저와 패스워드를 입력해서 접속하는 것을 권장한다. 패스워드를 변경하는 방법은 다음과 같이 mysql document 에서 확인할 수 있다. https://dev.mysql.com/doc/refman/5.7/en/assigning-passwords.htm..
Mysql CASE 문법 사용법
2022. 12. 5. 18:19
데이터 엔지니어링/Database
Mysql 에서 출력할 때 조건을 통해 값을 반환하기 위해서 CASE 문법을 사용한다. CASE 문법의 사용법에 대해서 정리해봤다. CASE 문법의 사용법은 다음과 같다. CASE WHEN [조건1] THEN [반환값1] WHEN [조건2] THEN [반환값2] WHEN [조건n] THEN [반환값n] ELSE [반환값] END CASE 문법은 다음과 같이 사용할 수 있다. WHEN ~ THEN 은 항상 같이 사용해야 한다. WHEN ~ THEN 은 여러개 사용할 수 있다. WHEN ~ THEN 조건에 충족되지 않을 경우 ELSE 의 값이 반환된다. 만약 ELSE 가 없다면 NULL 을 반환한다. 예를 들어, 다음과 같이 사용해볼 수 있다. SELECT CASE WHEN score >= 90 THEN '..