PostgreSQL

Primary Key + Auto_Increment 를 하고싶을 때, Sequence, Serial 을 버려라. Sequence 특징 데이터 타입을 따로 명시해야하고. 테이블 생성시 같이 선언해야한다. 값을 업데이트할 경우, sequence 이름을 명시해야한다. Serial 특징 데이터 타입을 따로 명시할 필요가 없다. `INSERT` privilege 를 테이블 권한에 및 `USAGE` privilege 를 기저를 이루는 sequence 에 줘야한다. (Serial 도 결국 sequence 생성이 이뤄지기 때문에) ✅ PostgreSQL version 10부터는 Identity 가 국룰이다. 특징 컬럼의 데이터 타입을 명시해야하고 오로지 `INSERT` privilege 만 테이블에 부여하는 것으로 충..
When to use? 특정 attribute 의 값의 범위를 강제할 때. ex) birth_date DATE CHECK (birth_date > '1900-01-01') age INT CHECK (age between 0 and 100) How to use? 네이밍 컨벤션 __check CREATE TABLE ALTER TABLE 🔗 Reference PostgreSQL CHECK Constraint Summary: in this tutorial, you will learn about the PostgreSQL CHECK constraints and how to use them to constrain values in columns of a table based on a boolean expressio..
🎯 Goals 트리거 , 트랜잭션 내에서 언제 실행될까? 3가지 타입의 트리거 BEFORE ✅ AFTER (Only handle this in this post) INSTEAD OF 각 트리거 타입에 따라 Default Behavior 가 다르므로 꼭 공식문서를 참조하길 바란다. 이 글에선 `AFTER` 트리거만 다룬다. 아래 SQL문을 보고 실행 결과를 예상해보자. Each statement? vs After all transaction `COMMIT()`? 당연히 나는 후자로 알고있었다, 트랜잭션의 모든 Statement 가 끝난 후에 `COMMIT()` 된 시점에 트리거가 발동할 줄 알았다. 예상한 로그는 다음과 같다. ❌ 틀렸다, 각 문장마다 곧바로 트리거가 실행됐다. 공식 문서 훔쳐보기 Row-..
pool 객체를 트랜잭션과 함께 쓰지마라. Do not use pool.query if you need transactional integrity: the pool will dispatch every query passed to pool.query on the first available idle client. Transactions within PostgreSQL are scoped to a single client and so dispatching individual queries within a single transaction across multiple, random clients will cause big problems in your app and not work. For more info ..
1. 함수 사용 방법 함수 선언 리턴 타입이 `TRIGGER` 일 때 이 때는 반드시 트리거가 파라미터를 넘겼을 때 `TG_ARGV` 로 받아야한다. plpgsql 언어로 함수를 정의하고 리턴타입이 `TRIGGER` 인 경우, 자동으로 다음과 같은 변수가 블록 최상단에 선언된다. NEW 레코드 타입, 새로 `INSERT | UPDATE` 된 로우 DELTE에 대해서는 null 값을 가짐 OLD 레코드 타입, 변경 전 `UPDATE | DELETE` 된 로우 INSERT에 대해서는 null 값을 가짐 TG_ARGV[] text 배열, 파라미터를 받아올 때 이 키워드로 받아와야함. 트리거 함수는 반드시 NULL이나 레코드 타입을 반환해야함. 트리거 트리거 선언 네이밍 컨벤션 함수 fn_ postgreSQL ..
When to use? postgreSQL 내에서 특정 row 가 변경되면 해당 이벤트를 특정 채널에 Notify 할 수 있는 기능. ex) Node.js 에서 PostgreSQL 에서 발생한 특정 이벤트 페이로드를 받아온다. Syntax pg_notify() is just a convenient wrapper function for the SQL NOTIFY command. pg_notify (channel-name, payload) Channel 알림 채널명, 채널명은 테이블명 그대로 따라가는 것이 관례다. Payload 8,000 바이트 이하의 문자열 데이터 💡 Notify in transaction NOTIFY behaves is executed in a transaction, the notify..
M_Falcon
'PostgreSQL' 태그의 글 목록