Можно ли создавать базы данных PostgreSQL с динамическими именами с помощью Golang?

Я использую 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);
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
3 068
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуй это,

 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") не будет работать.

Спасибо. Попробую и что напишу здесь)

Klimbo 07.04.2019 14:26

Однако не забудьте сменить имя пользователя и пароль. И может быть принять ответ, если он заработает. Это рабочий пример, я попробовал его на своей машине.

monirz 07.04.2019 17:13

Разве это не создает таблицу «пример» в базе данных «postgres»?

Rahul 27.02.2021 11:38

Другие вопросы по теме