sql - 是否可以在 Golang 的帮助下创建具有动态名称的 PostgreSQL 数据库?
问题描述
我在后端使用 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);
解决方案
尝试这个,
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")
不会工作一样。
推荐阅读
- javascript - 仅播放视频 HTML5 的前 30 秒
- java - 在 Jackon 中生成模式时,如何从模式中排除字段?
- ios - 网页上的 Apple 登录设置
- python-3.x - Python:调用函数时出现意外输出
- android - 每当我运行我的片段时,这行代码 mapFragment.setRetainInstance(true); 正在崩溃我的应用程序?
- django - Django在注销前重定向用户
- java - 如何解决 JPMS 和 OSGi Bundle for Eclipse 插件项目和 Tycho 之间的冲突
- django - 如何从 django 中的 url 访问多个参数?
- cockroachdb - 选择查询中的 Cockroachdb 格式日期时间
- python - 如何检查给定的部分或不完整的 python 程序在语法上是否正确