Postgresql Golang为“公司”编制了报表;“创建表格”;

Postgresql Golang为“公司”编制了报表;“创建表格”;,postgresql,go,prepared-statement,create-table,Postgresql,Go,Prepared Statement,Create Table,我发现create table语句无法识别我要插入的通配符。我如何在golang做准备好的声明 stmt, err := tx.Prepare(` CREATE TABLE table_number_$1 ( guid character varying(64) NOT NULL, number integ

我发现
create table
语句无法识别我要插入的通配符。我如何在golang做准备好的声明

                    stmt, err := tx.Prepare(`
                    CREATE TABLE table_number_$1 (
                            guid character varying(64) NOT NULL,
                            number integer,
                            name character varying(64),
                            PRIMARY KEY (guid),
                            CONSTRAINT some_onstraint
                            CHECK ((number = $2))
                    )`)
                    if err != nil {
                            return err 
                    }   
                    defer stmt.Close()
                    if _, err := stmt.Exec(
                            string(table_number),
                            table_number; err != nil {
                            tx.Rollback()
                            return err 
                    }  
打印时出现的错误是:
sql:应为0个参数,得到2个

编辑:
显然,我知道我可以像普通一样构建字符串,但我想知道是否有一种内置方式。

在SQL中不能对表名或列名使用参数。您必须手动转义变量部分,并在代码中构建表名,并在将其发送到数据库之前将其注入SQL字符串中


同样,PostgreSQL也不允许在
CREATE
语句中的任何位置使用变量。这意味着引擎在运行此类查询时将不接受任何参数。

在SQL中不能对表或列名使用参数。您必须手动转义变量部分,并在代码中构建表名,并在将其发送到数据库之前将其注入SQL字符串中


同样,PostgreSQL也不允许在
CREATE
语句中的任何位置使用变量。这意味着引擎在运行此类查询时不会接受任何参数。

在PostgreSQL中不可能,因为:

  • PostgreSQL的绑定参数只能用于文本,不能用于标识符。这是因为解析器必须知道标识符是什么才能正确解析查询,但是绑定参数只有在解析之后才会发送。因此,不能对表名等使用参数

  • PostgreSQL无论如何都不支持实用程序语句中的绑定参数(insert/update/delete/select除外)


  • 一些驱动程序支持客户端参数替换和通过不同的位置参数语法转义标识符,但据我所知,Go的不支持。因此,您必须小心地使用字符串插值。请记住始终将标识符括在
    “双引号”
    中,并将任何嵌入的引号括起来,这样表名
    my“table”
    在SQL中变成
    “我的”“表格!”

    在PostgreSQL中不可能,因为:

  • PostgreSQL的绑定参数只能用于文本,不能用于标识符。这是因为解析器必须知道标识符是什么才能正确解析查询,但是绑定参数只有在解析之后才会发送。因此,不能对表名等使用参数

  • PostgreSQL无论如何都不支持实用程序语句中的绑定参数(insert/update/delete/select除外)

  • 一些驱动程序支持客户端参数替换和通过不同的位置参数语法转义标识符,但据我所知,Go的不支持。因此,您必须小心地使用字符串插值。请记住始终将标识符括在
    “双引号”
    中,并将任何嵌入的引号括起来,这样表名
    my“table”在SQL中变为
    “我的”“表!”