[Pgday.Seoul 2021] 2. Porting Oracle UDF and OptimizationPgDay.Seoul
The document discusses porting functions from Oracle to PostgreSQL and optimizing performance, including different function types in PostgreSQL like SQL functions and PL/pgSQL functions, as well as volatility categories. It also provides examples of test data created for use in examples and covers strategies for analyzing inefficient Oracle functions and improving them to leverage the PostgreSQL optimizer.
[Pgday.Seoul 2021] 2. Porting Oracle UDF and OptimizationPgDay.Seoul
The document discusses porting functions from Oracle to PostgreSQL and optimizing performance, including different function types in PostgreSQL like SQL functions and PL/pgSQL functions, as well as volatility categories. It also provides examples of test data created for use in examples and covers strategies for analyzing inefficient Oracle functions and improving them to leverage the PostgreSQL optimizer.
This document summarizes a presentation on Multi Version Concurrency Control (MVCC) in PostgreSQL. It begins with definitions and history of MVCC, describing how it allows transactions to read and write without blocking each other. It then discusses two approaches to MVCC - storing old versions in the main database (PostgreSQL) vs a separate area (Oracle). The rest of the document does a deep dive on how MVCC is implemented in PostgreSQL specifically, showing how tuple headers track transaction IDs and pointers to maintain multiple versions of rows.
The document provides an overview of PostgreSQL performance tuning. It discusses caching, query processing internals, and optimization of storage and memory usage. Specific topics covered include the PostgreSQL configuration parameters for tuning shared buffers, work memory, and free space map settings.
The paperback version is available on lulu.com there http://goo.gl/fraa8o
This is the first volume of the postgresql database administration book. The book covers the steps for installing, configuring and administering a PostgreSQL 9.3 on Linux debian. The book covers the logical and physical aspect of PostgreSQL. Two chapters are dedicated to the backup/restore topic.
This document provides an introduction and overview of PostgreSQL, including its history, features, installation, usage and SQL capabilities. It describes how to create and manipulate databases, tables, views, and how to insert, query, update and delete data. It also covers transaction management, functions, constraints and other advanced topics.
This presentation covers all aspects of PostgreSQL administration, including installation, security, file structure, configuration, reporting, backup, daily maintenance, monitoring activity, disk space computations, and disaster recovery. It shows how to control host connectivity, configure the server, find the query being run by each session, and find the disk space used by each database.
This document provides an overview of Postgresql, including its history, capabilities, advantages over other databases, best practices, and references for further learning. Postgresql is an open source relational database management system that has been in development for over 30 years. It offers rich SQL support, high performance, ACID transactions, and extensive extensibility through features like JSON, XML, and programming languages.
Spencer Christensen
There are many aspects to managing an RDBMS. Some of these are handled by an experienced DBA, but there are a good many things that any sys admin should be able to take care of if they know what to look for.
This presentation will cover basics of managing Postgres, including creating database clusters, overview of configuration, and logging. We will also look at tools to help monitor Postgres and keep an eye on what is going on. Some of the tools we will review are:
* pgtop
* pg_top
* pgfouine
* check_postgres.pl.
Check_postgres.pl is a great tool that can plug into your Nagios or Cacti monitoring systems, giving you even better visibility into your databases.
MySQL Administrator
Basic course
- MySQL 개요
- MySQL 설치 / 설정
- MySQL 아키텍처 - MySQL 스토리지 엔진
- MySQL 관리
- MySQL 백업 / 복구
- MySQL 모니터링
Advanced course
- MySQL Optimization
- MariaDB / Percona
- MySQL HA (High Availability)
- MySQL troubleshooting
네오클로바
http://neoclova.co.kr/
This document provides technical details about PostgreSQL WAL (Write Ahead Log) buffers. It describes the structure and purpose of WAL segments, WAL records, and their components. It also explains how the WAL is used to safely recover transactions after a server crash by replaying the log.
This document provides an agenda and background information for a presentation on PostgreSQL. The agenda includes topics such as practical use of PostgreSQL, features, replication, and how to get started. The background section discusses the history and development of PostgreSQL, including its origins from INGRES and POSTGRES projects. It also introduces the PostgreSQL Global Development Team.
This document discusses PostgreSQL statistics and how to use them effectively. It provides an overview of various PostgreSQL statistics sources like views, functions and third-party tools. It then demonstrates how to analyze specific statistics like those for databases, tables, indexes, replication and query activity to identify anomalies, optimize performance and troubleshoot issues.
[pgday.Seoul 2022] PostgreSQL with Google CloudPgDay.Seoul
Google Cloud offers several fully managed database services for PostgreSQL workloads, including Cloud SQL and AlloyDB.
Cloud SQL provides a fully managed relational database service for PostgreSQL, MySQL, and SQL Server. It offers 99.999% availability, unlimited scaling, and automatic failure recovery.
AlloyDB is a new database engine compatible with PostgreSQL that provides up to 4x faster transactions and 100x faster analytics queries than standard PostgreSQL. It features independent scaling of storage and computing resources.
Google Cloud aims to be the best home for PostgreSQL workloads by providing compatibility with open source PostgreSQL and enterprise-grade features, performance, reliability, and support across its database services.
This document summarizes a presentation on Multi Version Concurrency Control (MVCC) in PostgreSQL. It begins with definitions and history of MVCC, describing how it allows transactions to read and write without blocking each other. It then discusses two approaches to MVCC - storing old versions in the main database (PostgreSQL) vs a separate area (Oracle). The rest of the document does a deep dive on how MVCC is implemented in PostgreSQL specifically, showing how tuple headers track transaction IDs and pointers to maintain multiple versions of rows.
The document provides an overview of PostgreSQL performance tuning. It discusses caching, query processing internals, and optimization of storage and memory usage. Specific topics covered include the PostgreSQL configuration parameters for tuning shared buffers, work memory, and free space map settings.
The paperback version is available on lulu.com there http://goo.gl/fraa8o
This is the first volume of the postgresql database administration book. The book covers the steps for installing, configuring and administering a PostgreSQL 9.3 on Linux debian. The book covers the logical and physical aspect of PostgreSQL. Two chapters are dedicated to the backup/restore topic.
This document provides an introduction and overview of PostgreSQL, including its history, features, installation, usage and SQL capabilities. It describes how to create and manipulate databases, tables, views, and how to insert, query, update and delete data. It also covers transaction management, functions, constraints and other advanced topics.
This presentation covers all aspects of PostgreSQL administration, including installation, security, file structure, configuration, reporting, backup, daily maintenance, monitoring activity, disk space computations, and disaster recovery. It shows how to control host connectivity, configure the server, find the query being run by each session, and find the disk space used by each database.
This document provides an overview of Postgresql, including its history, capabilities, advantages over other databases, best practices, and references for further learning. Postgresql is an open source relational database management system that has been in development for over 30 years. It offers rich SQL support, high performance, ACID transactions, and extensive extensibility through features like JSON, XML, and programming languages.
Spencer Christensen
There are many aspects to managing an RDBMS. Some of these are handled by an experienced DBA, but there are a good many things that any sys admin should be able to take care of if they know what to look for.
This presentation will cover basics of managing Postgres, including creating database clusters, overview of configuration, and logging. We will also look at tools to help monitor Postgres and keep an eye on what is going on. Some of the tools we will review are:
* pgtop
* pg_top
* pgfouine
* check_postgres.pl.
Check_postgres.pl is a great tool that can plug into your Nagios or Cacti monitoring systems, giving you even better visibility into your databases.
MySQL Administrator
Basic course
- MySQL 개요
- MySQL 설치 / 설정
- MySQL 아키텍처 - MySQL 스토리지 엔진
- MySQL 관리
- MySQL 백업 / 복구
- MySQL 모니터링
Advanced course
- MySQL Optimization
- MariaDB / Percona
- MySQL HA (High Availability)
- MySQL troubleshooting
네오클로바
http://neoclova.co.kr/
This document provides technical details about PostgreSQL WAL (Write Ahead Log) buffers. It describes the structure and purpose of WAL segments, WAL records, and their components. It also explains how the WAL is used to safely recover transactions after a server crash by replaying the log.
This document provides an agenda and background information for a presentation on PostgreSQL. The agenda includes topics such as practical use of PostgreSQL, features, replication, and how to get started. The background section discusses the history and development of PostgreSQL, including its origins from INGRES and POSTGRES projects. It also introduces the PostgreSQL Global Development Team.
This document discusses PostgreSQL statistics and how to use them effectively. It provides an overview of various PostgreSQL statistics sources like views, functions and third-party tools. It then demonstrates how to analyze specific statistics like those for databases, tables, indexes, replication and query activity to identify anomalies, optimize performance and troubleshoot issues.
[pgday.Seoul 2022] PostgreSQL with Google CloudPgDay.Seoul
Google Cloud offers several fully managed database services for PostgreSQL workloads, including Cloud SQL and AlloyDB.
Cloud SQL provides a fully managed relational database service for PostgreSQL, MySQL, and SQL Server. It offers 99.999% availability, unlimited scaling, and automatic failure recovery.
AlloyDB is a new database engine compatible with PostgreSQL that provides up to 4x faster transactions and 100x faster analytics queries than standard PostgreSQL. It features independent scaling of storage and computing resources.
Google Cloud aims to be the best home for PostgreSQL workloads by providing compatibility with open source PostgreSQL and enterprise-grade features, performance, reliability, and support across its database services.
[소스 코드]
https://github.com/henlix/data-structure.git
[설명]
대학생 연합 IT 벤처 창업 동아리 S.O.P.T (Shout Our Passion Together - http://sopt.org) 에서 내부적으로 진행하는 전공 과목 기초 스터디 자료입니다.
이번주에 다룰 내용은 전반적인 개요, 복잡도 분석 및 기초 데이터 구조인 배열과 연결리스트 기초입니다.
스터디 자료는 다음과 같은 순서대로 올라갈 예정입니다.
1. 데이터 구조 및 알고리즘
2. 운영체제
3. 네트워크
"R을 이용한 데이터 처리 & 분석 실무 - 서민구 지음" 정리 자료 #3
- https://thebook.io/006723/
- 첫번째 : goo.gl/FJjOlq
- 두번째 : goo.gl/Wdb90g
- 세번째 : goo.gl/80VGcn
- 네번째 : goo.gl/lblUsR
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스PgDay.Seoul
This document summarizes how to set up and use Citus, an open-source PostgreSQL-based distributed database. It explains how to install Citus, add worker nodes, create distributed tables, and use features like reference tables to perform distributed queries across the cluster.
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposhaPgDay.Seoul
This document introduces AppOS, an operating system specialized for database performance. It discusses how AppOS improves on Linux by being more optimized for database workloads through techniques like specialized caching, I/O scheduling based on database priorities, and atomic writes. It also explains how AppOS is portable, high performing, and extensible to support different databases through its modular design. Future plans include improving cache management, parallel query optimization, and cooperative CPU scheduling.
[Pgday.Seoul 2018] 이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PGPgDay.Seoul
This document discusses DB2PG, a tool for migrating data between different database management systems. It began as an internal project in 2016 and has expanded its supported migration paths over time. It can now migrate schemas, tables, data types and more between Oracle, SQL Server, DB2, MySQL and other databases. The tool uses Java and supports multi-threaded imports for faster migration. Configuration files allow customizing the data type mappings and queries used during migration. The tool is open source and available on GitHub under the GPL v3 license.
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기PgDay.Seoul
The document discusses setting up PostgreSQL in an AWS cloud environment. It provides information on using PostgreSQL with AWS services like RDS, Aurora, EC2 and EBS. It compares IaaS vs PaaS deployment options and discusses features of AWS databases like backups, read replicas, high availability and security. The document also summarizes benefits of Aurora over traditional databases like faster crash recovery, continuous backups and independent scaling of database layers.
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우PgDay.Seoul
B-tree is ideal for unique values while GIN is ideal for indexes with many duplicates. GIST can index most data types and is useful for operations like containment and overlap. A comparison found that GIN indexes have faster search times but slower update times than GiST indexes, and GIN indexes are larger in size and take longer to build. In summary, the best index type depends on the data characteristics and query operations.
2. PgDay.Seoul 2021
Ver. 14 새 SQL
● WITH RECURSIVE ... (...)
SEARCH DEPTH FIRST BY order_column SET column_name
SELECT … ORDER BY column_name
● WITH RECURSIVE ... (...)
CYCLE cycle_check_column SET is_cycle USING column_name
SELECT … WHERE is_cycle = false ORDER BY column_name
● jsonb_data['key1']['subkey2']::int + 1
● SELECT range_agg(range_type_column) FROM table
2
3. PgDay.Seoul 2021
Ver. 14 새 SQL - WITH RECURSIVE
3
WITH RECURSIVE t AS (
SELECT *, addrname AS conname
FROM addrcodes
WHERE addrid = '380704'
UNION ALL
SELECT a.*, a.addrname || ' ' || t.conname
FROM addrcodes a, t
WHERE a.addrid = t.upaddr
)
SEARCH DEPTH FIRST BY addrname SET path
CYCLE addrname SET is_cycle USING path2
SELECT conname
FROM t
WHERE is_cycle = false
ORDER BY path DESC
FETCH FIRST 1 ROW ONLY
5. PgDay.Seoul 2021
Ver. 14 새 SQL - multirange 자료형 1
5
이 초록 영역을 어떻게 구할 것인가? multirange!
dTS *multirange
6. PgDay.Seoul 2021
Ver. 14 새 SQL - multirange 자료형 2
6
postgres=# SELECT lower(unnest), upper(unnest) - 1
FROM (SELECT unnest(
'{[2021-08-01, 2021-10-01)}'::datemultirange
- range_agg(daterange(startdate, enddate, '[]')))
FROM place_term
WHERE startdate > '2021-08-01' AND enddate < '2021-09-30') AS t;
lower | ?column?
------------+------------
2021-08-01 | 2021-08-03
2021-09-27 | 2021-09-30
(2개 행)
7. PgDay.Seoul 2021
대한민국 구석구석 자료 소개
7
● 한국관광공사에서 제공하는 공공 그래프 데이터베이스 자료
출처: http://data.visitkorea.or.kr/linked_open_data
● 이것을 PostgreSQL용으로 변환하고, 관계형 데이터베이스 모델로 바꿨다.
● 엔터티 관계도:
https://github.com/i0seph/visitkorea_for_pg/blob/master/graph2rdbms/visitkor
ea-erd.pdf
● flask 로 만든 샘플 코드는 그 위에
8. PgDay.Seoul 2021
예제 구성 - 첫화면
8
검색: 인덱스를 사용하는 %검색%
분류 검색: 계층형 쿼리와 그 외
추천 장소: 임의 뽑기 최적화
오늘 행사 중인 축제: 범위 자료형 검색
9. PgDay.Seoul 2021
예제 구성 - 설명 화면
9
분류와 지역: 계층형 쿼리
각 항목: key-value 자료 구조처리
인근 추천 장소: 위경도 인덱스 탐색 및 거리
계산
10. PgDay.Seoul 2021
SQL 1: DISTINCT ON
10
● 1:N 관계에서 N 자료 가운데 하나만 뽑기
○ 전통적으로 row_number() 윈도우 함수를 이용한 인라인뷰를 만들고, 그 값이 1인 것을 뽑음
SELECT …. FROM (
SELECT …, row_number() OVER (PARTITION BY … ORDER BY …) as no
FROM …) AS t WHERE no = 1
○ 이 복잡한 쿼리가 DISTINCT ON으로 해결 가능함 (sql_search_list.py)
SELECT DISTINCT ON (a.place_name, a.place_id)
a.place_id, a.place_name, b.imgurl
FROM place a LEFT JOIN place_images b ON a.place_id = b.place_id
WHERE place_name ~* to_regexp('자연 휴양림')
ORDER BY a.place_name, a.place_id, b.imgurl
FETCH FIRST 50 ROWS ONLY
11. PgDay.Seoul 2021
SQL 2: 문자열 검색
11
● 전통 기법: LIKE, ILIKE
○ 인덱스를 사용하지 않아 테이블 전체 탐색을 함, WHERE place_name LIKE %자연휴양림%
○ 단어 분리 상황에서 AND 연산 중복 비용 발생, WHERE place_name LIKE %자연% AND place_name
LIKE %휴양림%
● pg_trgm 확장 모듈과 정규식을 이용한 문제 풀기 (sql_search_list.py)
1. CREATE EXTENSION pg_trgm
2. CREATE INDEX place_name_i ON place USING gist_trgm_ops (place_name)
3. CREATE OR REPLACE FUNCTION to_regexp(text) RETURNS text LANGUAGE sql
IMMUTABLE AS $function$
SELECT string_agg('(?=.*' || a || ')','') FROM
UNNEST(tsvector_to_array(to_tsvector('simple', $1))) a
$function$
4. SELECT ...
FROM place a LEFT JOIN place_images b ON a.place_id = b.place_id
WHERE a.place_name ~* to_regexp('자연 휴양림')
...
12. PgDay.Seoul 2021
SQL 3: 배열 검색
12
● 전통 기법: IN
○ WHERE col IN (1,2,3,4)
● pg의 또 다른 문법: ANY
○ WHERE col = ANY(ARRAY[1,2,3,4])
○ 더 복잡한 문법을 왜 쓰지? SQLAlchemy 모듈에서 변수 바인딩이 쉬워짐
○ sql_place_list.py 참조
SELECT addrid FROM addrcodes WHERE upaddr = ANY(:locastr)
query_string으로 받은 문자열 loca 값을 loca.split() 함수로 배열 locastr 으로 바꾸고
그것을 그대로 쿼리로 넘겨 넘겨주면, SQLAlchemy 모듈이 알아서 처리해줌
○ 대부분 응용 프로그램 pg용 DB 드라이버들이 이 배열처리를 편하게 쓸 수 있도록
각자의 방법을 제공함
13. PgDay.Seoul 2021
SQL 4: 실무 예제와 쿼리 최적화
13
SELECT DISTINCT ON (a.place_id, a.place_name)
a.place_id, a.place_name, c.imgurl
FROM place a,
(SELECT place_id FROM place
WHERE loca IN (SELECT addrid FROM addrcodes WHERE upaddr = ANY (ARRAY['380300']))
AND cate IN ( WITH RECURSIVE t AS (
SELECT * FROM tourism WHERE uptour = ANY (ARRAY['A05', 'B02'])
UNION ALL
SELECT a.* FROM tourism a, t WHERE a.uptour = t.tourid)
SELECT tourid FROM t WHERE length(tourid) = 9)
ORDER BY place_name FETCH FIRST 50 ROWS ONLY) b
LEFT JOIN place_images c ON b.place_id = c.place_id
WHERE a.place_id = b.place_id
ORDER BY a.place_name, a.place_id, c.imgurl;
● 전라남도 곡성군 음식점과 숙박 시설 찾는 쿼리
14. PgDay.Seoul 2021
SQL 5: TABLESAMPLE - 임의 자료 탐색
14
● 전통적인 ORDER BY random() LIMIT 10 구문은 테이블 전체를 탐색한다.
● TABLESAMPLE {SYSTEM|BERNOULLI} (퍼센트)
○ SYSTEM: 임의 블록으로 가서 그 해당 자료 수 만큼 추출 (퍼센트 값이 아주 작다면 하나의
블록 읽기만 하는데, 그 안에 비슷한 자료들이 몰려 있으면 임의 추출의 의미가 퇴색함)
○ BERNOULLI: 블록 기준으로 해당 퍼센트 확률만큼 블록을 선택하고 거기서 자료를 추출
(확률값이 낮을 수록 더 많은 블록을 뒤지게 된다. 반면 임의 추출 품질은 좋아짐)
● place_images 테이블(블록수: 약 1,400개) 대상 베르누이 샘풀링 확률 보면,
○ 1% = 18, 0.1% = 43, 0.01% = 600 정도의 블록을 읽음으로 예제 코드에서는 0.05로 설정함
○ 이처럼 베르누이 확률을 사용할 경우는 비용과 품질 사이 적정값을 찾아야 함
SELECT DISTINCT ON (place_id) place_id, imgurl
FROM ( SELECT place_id, imgurl FROM place_images
TABLESAMPLE BERNOULLI (0.05) LIMIT 20
) a ORDER BY place_id, imgurl LIMIT 10
15. PgDay.Seoul 2021
SQL 6: 범위 자료형 탐색 - 오늘 방문하면 되는 곳
15
● 전통적인 범위, 기간 검색은 시작값(lower)과 마침값(upper)을 저장하고, >=,
<, BETWEEN 연산으로 처리 함.
○ 시작날짜가 오늘보다 작거나 같고, 마침날짜가 오늘보다 크거나 같은 것
startdate <= current_date and enddate >= current_date
● 범위자료형을 쓰면
○ 행사기간들 중에 오늘이 포함된 것
term @> current_date
● 전통적인 모델링을 바꿀 수 없다면 (sql_festa_list.py)
○ 범위자료형 변환 함수를 사용하는 함수 기반 인덱스를 만들어 쓴다
CREATE INDEX term_range_i ON place_term USING gist (daterange(startdate, enddate, '[]'));
SELECT * FROM place_term
WHERE daterange(startdate, enddate, '[]') @> CURRENT_DATE
AND daterange(date_trunc('month' , current_timestamp)::date, (date_trunc('month' ,
current_timestamp) + interval '1 month')::date) @> daterange(startdate, enddate, '[]')
16. PgDay.Seoul 2021
SQL 7: key-value 자료 처리 - json
16
● 처음부터 jsonb, json 자료형으로 DB에 넣고 꺼내기
○ json 양식 검사 문제
○ jsonb 인 경우 key 정렬 문제
○ 해당 칼럼이 toast에 저장되는 문제
● DB에는 관계형으로 저장되고, 응용프로그램에서 json으로 다루기
○ 어디서 json으로 변환할 것인가?
■ DB측: json_build_*(), json_agg() 함수를 사용
■ APP측: DB result row의 유연한 json 변환 작업을 제공해야함
17. PgDay.Seoul 2021
SQL 7: key-value 자료 처리 - 예제
17
● 예제에서는 N:N 관계형 모델링 자료에 대한 처리를 다룬다.
● DB 측 ● 응용프로그램 측(python flask)
SELECT b.attname, a.v
FROM place_attrib a JOIN attnames b ON a.attid = b.attid
WHERE place_id = 130679;
attname | v
----------------------+------------------------------------
규모 | 지상 3층
신용카드사용여부 | 불가능
전화번호 | 033-462-2303
유모차대여서비스 | 불가능
주소 | 강원도 인제군 북면 만해로 91
이용요금 | 무료
애완동물동반가능여부 | 불가능
우편번호 | 24606
이용시간 | 09:00~17:00
쉬는날 | 매주 월요일, 1월 1일, 설/추석 당일
주차시설 | 주차 가능
@app.route('/ajax/getattrib/<int:place_id>')
def get_attribute(place_id):
mod = __import__('sql_get_attribute')
d = sql(mod.query, {'place_id': place_id})
return jsonify([dict(row) for row in d.fetchall()])
18. PgDay.Seoul 2021
SQL 8: 위경도 처리
18
● 위경도값 처리를 위한 작업
○ WGS84 좌표계를 사용하는 위경도값이라면,
가장 단순한 방법으로 earthdistance 확장 모듈을 사용하는 것이다.
CREATE EXTENSION earthdistance CASCADE;
ALTER TABLE place ADD position earth GENERATED ALWAYS AS (ll_to_earth(lat, long)) STORED;
-- INSERT 작업에서는 이 position 칼럼의 값으로 default를 쓴다
CREATE INDEX CONCURRENTLY place_position_i ON place USING gist (position);
-- 자료 찾기, :y1 = 현재 위도, :x1 = 현재 경도, :place_id = 현재 장소번호
-- 현재 위치에서 2Km 안에 있는 다른 장소들 찾기
SELECT place_id,
round((earth_distance(position, ll_to_earth(:y1, :x1))::numeric / 1000)::numeric, 2)::float as
distance
FROM place
WHERE earth_box(ll_to_earth(:y1, :x1), 2000) @> position AND a.place_id <> :place_id
19. PgDay.Seoul 2021
그 외 SQL 들
19
● 형변환자: ::
● {INSERT|UPDATE|DELETE} … RETURNING …
● JOIN UPDATE: UPDATE … FROM
● JOIN DELETE: DELETE FROM … USING …
● INSERT or UPDATE: INSERT INTO … ON CONFLICT …
● 명령어 VAULES: SELECT * FROM (VALUES(1,2,3)) t
● LATERAL 예약어: SELECT … FROM a, LATERAL (SELECT * FROM b where b.col =
a.col) …
● LISTEN & NOTIFY
20. PgDay.Seoul 2021
참고 자료
20
● python flask
○ flask.palletsprojects.com
● jquery
○ jquery.com
● PostgreSQL
○ postgresql.org & postgresql.kr
● 발표를 위한 샘플 코드
○ https://github.com/i0seph/visitkorea_for_pg
● PostgreSQL 한국 사용자 모임
○ https://www.facebook.com/groups/postgres.kr