データベース上の全てのテーブルの CREATE TABLE
文を取得するようなコードを書いていました。
CREATE TABLE
の取得は以下のような感じ。
var tbl string
var ddl string
err := conn.QueryRow(fmt.Sprintf("SHOW CREATE TABLE `%s`", tableName)).Scan(&tbl, &ddl)
SHOW CREATE TABLE
は 2 列の結果を返すので、こんな感じの実装になりました。
ところがこれを実行してみると、データベースによっては以下のようなエラーが出ることがわかりました。
panic: sql: expected 4 destination arguments in Scan, not 2
エラーメッセージ的には、引数は 2 つじゃなくて 4 つ必要だよ、というものです。
どういうことだろうと調べてみたところ、エラーが出るのは ビュー を対象にしたときであることがわかりました。
ビューは SHOW CREATE TABLE
に対して 4 列の結果を返すようです。
今回はビューを無視することで対処しましたが、SHOW CREATE TABLE
を実行するときはテーブルとビューを区別して行う必要があるようです。