質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.59%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

10331閲覧

zero-length delimited identifier at or near """" の意味を知りたい

AIthon

総合スコア76

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2020/08/15 07:54

編集2020/08/15 08:52

前提・実現したいこと

Go1.13.4 で Gorm1.9.12とPQ1.1.1を利用し、PostgreSQL10.5を操作するプログラムを書いています
GormのCreateTableメソッドを用いて構造体をもとにしたテーブルを作成する処理を実行すると、

bash

1pq: zero-length delimited identifier at or near """"

というエラーが出ます
検索してもよくわからなかったので、

どのようなエラーなのか
どのようにすれば治るのか
を知りたいです。宜しくおねがいします。

補足情報

ソースコードの概要

go

1import ( 2 "github.com/jinzhu/gorm" 3) 4 5type User struct { 6 gorm.Model 7 Name string `json:"name"` 8 IconURL string `json:"icon_url"` 9 Groups []*Group `json:"group" gorm:"many2many:user_groups;"` 10} 11db, err := gorm.Open("postgres", databaseURL) 12if err != nil { 13 fmt.Printf(err) 14} 15db.CreateTable(&User{})

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

cateye

2020/08/15 08:25 編集

上記でソースの全てでしょうか?・ ・・大きなソースの時は、エラーが再現できる最小のコードを提示して下さい。 ・・・ちなみに、エラーの意味は分かっているのですか? pq: zero-length delimited identifier at or near """"・・・でググると結構ヒットしますが? ポスグレに投げている。or投げようとしているSQLは?
AIthon

2020/08/15 08:50

PostgreSQLに関係する処理は db.CreateTable(&User{}) のコード以外にgormを用いてデータベースを開く処理があります。上のソースコードに追記しておきました。 ちなみに、エラーの意味は分かっているのですか?→自分の検索力のなさと、データベースの関連知識の乏しさでわかりませんでした。 ポスグレに投げている。or投げようとしているSQLは?→すべてGoのモジュールであるGormに任せてしまっているので、恥ずかしながらわかりません。
guest

回答1

1

ベストアンサー

まずGormで db.LogMode(true) としてGormが生成するSQLを確認することをおすすめします。

  • どのようなエラーなのか

私の環境でエラーが再現できているわけではないですが、エラーの原因はおそらく以下の記事が参考になるかもしれません。

https://stackoverflow.com/questions/23165282/error-zero-length-delimited-identifier-at-or-near-line-1-delete-from-reg/30542991

つまり Gorm が生成するSQLでカラム名が "" となっているのではないでしょうか?

  • どのようにすれば治るのか

エラーの原因が "" (カラム名が空)によるもの、ということがわかった上での話になります。

Gormの many2many タグを用いていますが、.Related で関連するテーブルへのJOIN条件が指定されておらず "" が発生しているものと思います。Gormの many2many のタグの使い方はリファレンスが参考になるかと思います。

http://gorm.io/ja_JP/docs/many_to_many.html

(余談ですが、GormでJOINが絡む複雑なSELECT文を発行する場合、私は Exec で素のSQLを発行しちゃうことが多いですね...)

投稿2020/08/15 09:18

d_tutuz

総合スコア730

AIthon👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答へのコメント

AIthon

2020/08/15 09:25

非常にわかりやすい回答ありがとうございます! なるほど、db.LogMode(true)で挙動を把握できるんですね! 問題の原因となる場所まで示していただき、非常にわかりやすかったです。 勉強になりました!
d_tutuz

2020/08/15 09:27 編集

実際に問題が解決するか AIthon さんの環境で確認していただければ幸いです????????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.59%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

同じタグがついた質問を見る

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。