Golang和PostgreSQL的创建表给我的问题

时间:2018-09-13 05:47:18

标签: postgresql go

使用并遵循文档: https://godoc.org/github.com/lib/pq 但是几个小时后却看不到,无法在线研究以找到将变量传递给db.Exec()的任何好例子 我正在构建一个程序,该程序将根据在命令参数上输入的某些名称来创建新表。

db.Exec(`CREATE TABLE $1(
    ID INT PRIMARY KEY NOT NULL,
    HOST    TEXT    NOT NULL,
    PORTS   TEXT,
    BANNERS TEXT,
    JAVASCRIPT TEXT,
    HEADERS TEXT,
    COMMENTS TEXT,
    ROBOTS  TEXT,
    EMAILS  TEXT,
    CMS     TEXT,
    URLS    TEXT,
    BUSTIN  TEXT,
    VULN    TEXT
    )`,  tablename)

但是没有运气,我显然已经尝试过改变周围的事物,即使我尝试过 在字符串上建立CREATE TABLE语法,并尝试通过它而不是db.Exec(string) 但也没有运气 有人可以帮我吗?

谢谢

1 个答案:

答案 0 :(得分:2)

您可以在https://golang.org/src/database/sql/sql.go?s=39599:39668#L1437的第1478行中检查,首先准备sql语句,然后执行。

在PostgreSQL中,prepare仅对SELECT,INSERT,UPDATE,DELETE或VALUES https://www.postgresql.org/docs/10/static/sql-prepare.html有效。

这里您可以使用Go的fmt.Sprintf支持创建不同的表,并手动检查表名,SQL表名可以包含许多特殊字符,但是您可以缩小范围,我的验证是regexp.MustCompile(“ ^ [a- zA-Z _] + [0-9a-zA-Z _] * $“)。