Можно ли создавать базы данных PostgreSQL с динамическими именами с помощью Golang? - PullRequest
1 голос
/ 07 апреля 2019

Я использую Go на своем бэкэнде.Я пытаюсь написать функцию, которая берет имя базы данных и создает базу данных PostgreSQL с этим именем.После того, как эта функция должна создать таблицы в этой БД (я уже создал сценарий sql для этой задачи)

Поэтому основная проблема заключается в том, что я не понимаю, как написать функцию, которая будет создавать базу данных PostgreSQL.У меня была мысль создать один файл .sql и каким-то образом передать имя базы данных этому файлу (например, найти строку в файле .sql, которая выглядит как {{dbname}} и заменить ее именем db), но, возможно, существуетлучший способ?

Вот мой файл .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);

1 Ответ

2 голосов
/ 07 апреля 2019

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

 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)
   }

}

Примечание. Все операторы запросов не поддерживают параметры в postgress, например ("create database $1", "testdb") не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...