Я использую Go на своем бэкэнде. Я пытаюсь написать функцию, которая берет имя базы данных и создает базу данных PostgreSQL с этим именем. После этого функция должна создавать таблицы в этой БД (я уже создал sql-скрипт для этой задачи)
Итак, основная проблема в том, что я не понимаю, как написать функцию, которая создаст базу данных PostgreSQL. У меня была мысль создать один файл .sql и каким-то образом передать имя базы данных в этот файл (например, найти строку в файле .sql, которая выглядит как {{dbname}}, и заменить ее на имя базы данных), но может быть есть лучший путь?
Вот мой файл .sql, который должен создавать таблицы в новой базе данных PostgreSQL.
create table "reviews"
(
review_id uuid not null
constraint review_pk
primary key,
user_id uuid not null,
rating float,
comment text,
date date not null
);
create unique index reviews_review_id_uindex
on "reviews" (review_id);
create unique index reviews_user_id_uindex
on "reviews" (user_id);
create table "sections"
(
section_id uuid not null
constraint section_pk
primary key,
title text not null,
color text,
created_at date not null,
updated_at date not null,
deleted boolean default false
);
create unique index sections_section_id_uindex
on "sections" (section_id);
Попробуй это,
package main
import (
"database/sql"
"log"
_ "github.com/lib/pq"
)
func main() {
conninfo := "user=postgres password=yourpassword
host=127.0.0.1 sslmode=disable"
db, err := sql.Open("postgres", conninfo)
if err != nil {
log.Fatal(err)
}
dbName := "testdb"
_, err = db.Exec("create database " + dbName)
if err != nil {
//handle the error
log.Fatal(err)
}
//Then execute your query for creating table
_, err = db.Exec("CREATE TABLE example ( id integer,
username varchar(255) )")
if err != nil {
log.Fatal(err)
}
}
Примечание. Все операторы запроса не поддерживают параметры в postgres, например, ("create database $1", "testdb")
не будет работать.
Однако не забудьте сменить имя пользователя и пароль. И может быть принять ответ, если он заработает. Это рабочий пример, я попробовал его на своей машине.
Разве это не создает таблицу «пример» в базе данных «postgres»?
Спасибо. Попробую и что напишу здесь)