-
Golang Postgresql SQLC 설정하기Golang 2022. 3. 21. 23:32
계기
SQL 문만 작성하면 자동으로 타입을 선언하고 메서드를 생성해주는 좋은 툴이 있어서 사용하게 되었다.
적용
단점: Postgresql sqlc 는 window에서 지원하지 않는다.
그래서 본인은 wsl(window subsystem for linux)를 사용하다가 너무 문제가 많아서 그냥 이 김에 맥북을 하나 장만했다.sqlc: kyleconroy/sqlc: Generate type-safe code from SQL (github.com)
GitHub - kyleconroy/sqlc: Generate type-safe code from SQL
Generate type-safe code from SQL. Contribute to kyleconroy/sqlc development by creating an account on GitHub.
github.com
Install
brew install sqlc
Init
sqlc init
sqlc.yml file이 생성된다. 여기에 Config 설정을 해야 한다.
Configure
url: Getting started with PostgreSQL — sqlc 1.12.0 documentation
Getting started with PostgreSQL — sqlc 1.12.0 documentation
Getting started with PostgreSQL This tutorial assumes that the latest version of sqlc is installed and ready to use. Create a new directory called sqlc-tutorial and open it up. Initialize a new Go module named tutorial.sql.dev/app go mod init tutorial.sqlc
docs.sqlc.dev
sqlc.yml file을 아래와 같이 채운다. (sqlc generate로 db라는 package를 생성할 예정이기 때문에 name은 db로 설정)
version: "1" packages: - name: "db" # go package name path: "./db/sqlc" schema: "./db/migration" #앞선 post에서 사용한 migrate file으로 schema 생성(./db/migration폴더에 생성함) queries: "./db/query" engine: "postgresql"
이제 ./db/migration 폴더 안에 schema를 선언하고 ./db/query 폴더 안에 CRUD를 생성해보자.
생성
1. directory 생성 (migrate를 따라했다면 생략)
mkdir db
2. schema 생성 (migrate를 따라했다면 생략)
vi users.sql
xxx.sql 파일을 생성한다.(xxx는 본인이 원하는 파일이름)
CREATE TABLE "users" ( "uid" bigserial PRIMARY KEY, "email" varchar NOT NULL, "name" varchar NOT NULL, "phone" varchar NOT NULL, "profile_uri" varchar NOT NULL, "school" bigserial NOT NULL, );
3. query 생성
-- name: CreateUser :one INSERT INTO users ( email, name, phone, profile_uri, school ) VALUES ( $1, $2, $3, $4, $5 ) RETURNING *; -- name: GetUser :one SELECT * FROM users WHERE uid = $1 LIMIT 1; -- name: GetUserByEmail :one SELECT * FROM users WHERE email = $1 LIMIT 1; -- name: UpdateUser :one UPDATE users SET name=$2, phone=$3, profile_uri=$4, school=$5 WHERE uid = $1 RETURNING *; -- name: DeleteUser :exec DELETE FROM users WHERE uid = $1;
4. SQLC generate
sqlc generate
5. Check
이제 config에서 설정 한 ./db/sqlc 폴더에 내가 generate한 파일이 생성됐는지 확인한다. 제대로 생성되었다면 다른 package에서 아래와 같이 호출해서 사용할 수 있다.
usr, err := db.GetUser(ctx,uid);
'Golang' 카테고리의 다른 글
Golang GraphQL 서버 #5 (타입 리졸버 추가하기) (0) 2022.03.22 Golang GraphQL 서버 #4 (커스텀 타입 매핑하기) (0) 2022.03.22 golang postgresql migrate 설정하기 (0) 2022.03.21 golang 에러 Fatal error: newproc: function arguments too large for new goroutine (0) 2021.11.14 Golang GraphQL 서버 #3 (Resolver) (0) 2021.05.01