有没有办法使用Golang创建具有动态名称的PostgreSQL数据库?

5
我在后端使用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);
1个回答

7

试一下这个:

 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
不要忘记更改用户名和密码。如果您成功了,可以接受答案。这是一个可行的示例,我在我的机器上尝试过。 - monirz
4
这会在“postgres”数据库中创建“example”表吗? - Rahul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接