psycopg2 를 이용하면 편하게 PostgreSQL에 접근하여 자료를 다룰 수 있다. 편하게 이용할 수 있는 방법인 반면에 DB 접속 권한이 노출된다는 단점이 있다.
따라서, PostgreSQL이 설치된 서버에 RESTful API를 이용하여 자료를 전달하도록 한다. 보안 접속은 차차 구현해 보기로 하고, 기본형으로 시작한다.

찾아보면 더 좋은게 있을지도 모르겠다. 최근까지 업데이트 흔적이 있고, 스폰서가 있는 PostgREST를 이용해 보기로 했다. 예제는 다음을 참고했다.
https://postgrest.org/en/stable/tutorials/tut0.html
설치 파일을 다운 받는다.
https://github.com/PostgREST/postgrest/releases/tag/v7.0.1
tar.xz 파일이 이상하게도 압축이 안풀려서 Windows에서 풀어서 설치 파일을 복사해서 사용했다. 환경 설정 파일 없이 실행하면 친절하게 최소한의 옵션에 따라서 환경 설정 파일을 만들라고 한다. 사용자 계정, 계정의 비밀번호, DB 이름, 스키마 이름, role을 지정한다.
$ nano tutorial.conf
db-uri = "postgres://user:pass@localhost:5432/dbname"
db-schema = "public"
db-anon-role = "postgres"
작성 후 실행한다. 적절하게 만들어졌다면 다음과 같이 실행된다. 기본적으로 3000 포트를 이용한다.
$ ./postgrest tutorial.conf
Attempting to connect to the database...
Listening on port 3000
Connection successful
curl을 이용해서 테이블을 조회하여 본다. tablename이라는 테이블 내용을 조회하고 싶다면 다음과 같이 실행한다.
$ curl http://server:3000/tablename
JSON 포맷으로 tablename 테이블에 자료를 입력(POST)하고 싶다면 다음과 같이 입력한다.
$ curl http://server:3000/tablename -X POST \
-H "Content-Type: application/json" \
-d '{"source_id": "200",
"person_id": "15258756"}'
테이블 이름이 tablename이고, col1의 값이 1234인 열의 자료를 조회하고 싶다면 다음과 같이 한다. 연산자는 다음의 링크를 참조한다.
https://postgrest.org/en/v7.0.0/api.html
$ curl http://server:3000/tablename?col1=eq.1234
파이썬에서는 다음과 같이 한다. requests를 이용한다. POST는 다음과 같이 하면 된다.
>>> import requests
>>> requests.post('http://server:3000/tablename ', data={'col1': '1234'})
GET을 하는 방법은 2가지 방법이 있는 것 같은데 일단은 curl을 시도한 것과 유사한 형식으로 하면 된다. JSON 포맷으로 받으려면 다음과 같이 한다.
>>> tmp = requests.get('http://server:3000/tablename?col1=eq.1234').json()
>>> tmp[0]['col1']