2016-11-06 71 views
0

我在写一个简单的基于Golang的Redshift DataLoader。我必须使用Redshift Copy From S3命令作为Prepared语句,以便我可以将凭据作为参数的一部分传递。GoLang复制命令准备好的声明不起作用

我看到lib/pq没有正确解析SQL模板。任何想法,将不胜感激

COPY_FROM_S3 = ` 
    COPY {{.stageTable}} 
    FROM $1 
    WITH CREDENTIALS AS $2 
    DELIMITER $3 
    IGNOREBLANKLINES ACCEPTINVCHARS BLANKSASNULL 
    EMPTYASNULL ACCEPTANYDATE ESCAPE MAXERROR 50 
    STATUPDATE ON 
` 
    stmt , _ := redshiftDB.Prepare(COPY_FROM_S3) 
    stmt.Exec(s3File, awsCreds, delimter) 

获取语法错误

panic: pq: syntax error at or near "$1" 

goroutine 1 [running]: 

回答

0

的lib/PQ确实正确地分析它,问题是你要创建一个无效的查询模板,第一:{{.stageTable}}是正式templates ,第二:美元($ 1)表示法不适用于表名声明并不确定其他** $ ** s是否可以使用

+0

那么,模板字符串是我的第一遍,当statement.Exec被调用 - 复制命令不会有{{。 stageTable}}子串。模板被解析并用表名替换。 – kadalamittai