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

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

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

pgAdminは、オープンソースのPostgreSQL管理ツール。様々な機能を持ち、コマンドラインベースでPostgreSQLへ行う操作のほとんどをpgAdminを用いて実行することができます。

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

PostgreSQL

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

Q&A

解決済

2回答

956閲覧

[postgreSQL] jsonb カラムへ\を持つ文字列を正常にInsertする方法

nearNero

総合スコア1

pgAdmin

pgAdminは、オープンソースのPostgreSQL管理ツール。様々な機能を持ち、コマンドラインベースでPostgreSQLへ行う操作のほとんどをpgAdminを用いて実行することができます。

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

PostgreSQL

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

0グッド

0クリップ

投稿2022/07/27 08:18

前提

PgAdmin4 :ver 4.21

PgAdmin4 (postgreSQL)でjsonb カラムにinsert した際に、\←を使うと以下のようなエラーが出ています。
Escape sequence "\d" is invalid.

状況について

上記のエラーが出るinsert 文は以下となります(簡略化)。\\\-のようにエスケープすると通りますが、そのとき\d~のように表示したいところ\\d~のように表示されてしまいます。

こちらカラムの型がjsonb であることで書き方が変わってしまうのでしょうか?

sql

1create table table(col jsonb); 2 3insert INTO public.table (col) 4VALUES ('[{"regExpStr": "/\d+y/g"}]'); 5 6# \\ に変更 7insert INTO public.table (col) 8VALUES ('[{"regExpStr": "/\\d+y/g"}]');

json

1[{"regExpStr": "/\\d+y/g"}]

知りたいこと

以下のように\d~とInsertしたいです。
どうかご教授頂きたく願います!

json

1[{"regExpStr": "/\d+y/g"}]

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

そもそも\dがjson形式で扱えないっぽいですね。

SQL

1select E'[{"regExpStr": "/\\d+y/g"}]' -- 文字列としてはOK 2 3select E'[{"regExpStr": "/\\d+y/g"}]'::jsonb -- 変換時にエラー

投稿2022/07/27 10:02

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nearNero

2022/07/27 10:14

なるほど。。でしたら回避する実装を考えないとだめですね。。 ありがとうございました!
guest

0

sql

1insert INTO public.table (col) 2VALUES (E'[{"regExpStr": "/\\d+y/g"}]');

とか。
4.1. 字句の構造の「4.1.2.2. C形式エスケープでの文字列定数」に解説があります。

それがダメなら、「4.1.2.4. ドル記号で引用符付けされた文字列定数」にある方法も。

sql

1insert INTO public.table (col) 2VALUES ($$[{"regExpStr": "/\\d+y/g"}]$$);

投稿2022/07/27 09:15

編集2022/07/27 09:51
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nearNero

2022/07/27 09:36

ご回答ありがとうございます! そちらのC形式エスケープでInsertしますと、以下となりやはりInsert できません。。 `Escape sequence "\d" is invalid.` ちなみに↓のようにしたら`\`が表示されない状態になります。 ```sql insert INTO public.table (col) VALUES (E'[{"regExpStr": "/\d+y/g"}]'); ``` ```json [{"regExpStr": "/d+y/g"}] ```
退会済みユーザー

退会済みユーザー

2022/07/27 09:52

$$~~$$などと$$で括っとけば最強って話がありますので、それもお試しを。
nearNero

2022/07/27 10:03

$$で囲むのはやってませんでした。。ですがInsertはできますが、`\\`がそのまま表示される様子です。。 (ちなみに\d (\\dではなく)にすると`Escape sequence "\d" is invalid.`になります) ```sql insert INTO public.table (col) VALUES ($$[{"regExpStr": "/\\d+y/g"}]$$); ``` ```json [{"regExpStr": "/\\d+y/g"}] ```
退会済みユーザー

退会済みユーザー

2022/07/27 11:31

ん? 最終的に¥¥dで残ってなきゃいけないなら、¥¥¥¥dにならないか? 今PCから離れてて確かめようがなくて申し訳ないけど。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問