ぷっぽプログラミング備忘録

linux, javascript, php, C#, そのうちScalaとかアプリ開発とかやってみたいです。

postgresql

phpのPDOで、 postgresqlのjsonb演算子(?)を使いたい場合

概要 php(PDO) + postgresql の生SQLを実行時に Invalid parameter number: mixed named and positional parameters が発生。 原因、postgresqlのjsonbの演算子などではよく「?」を使うことがあるが、これと、phpのPDOのプリペアドステートメントの「?」(疑…

postgresql 中身が配列になっているjsonb型の検索

前提 [ { "foo": "foo内容1", "bar": "bar内容1", "kore": "kore1" }, { "foo": "foo内容2", "bar": "bar内容2" }, { "foo": "foo内容3", "bar": "bar内容3" } ] 上記のように、配列の中にさらにjsonが入っているタイプのデータがjsonbカラムに入っていた場…

postgresqlのテーブルのシーケンスを調べる方法

概要 SELECT pg_get_serial_sequence('foo_bar_table', 'hoge_column'); foo_bar_table: 調べたいテーブルの名前 hoge_column: 調べたいテーブルのカラム名 だいたいは、カラム名はidとかが多いんじゃないでしょうか。 参考 Postgresqlのserial型カラムのシ…

postgresqlでFROM側に配列を使い、規則性のあるデータを生成する

概要 UNNESTとARRAYを組み合わせたものをテーブルとして扱う 例)01,02...という内容の配列を、testTblとして扱う SELECT 'test_data_' || testTbl::text as test_val FROM UNNEST(ARRAY['01', '02', '03', '04']) AS testTbl ; 結果 test_val -------------…

postgresqlでmysqlのgroup_concatと同じことがしたいならstring_aggを使う

前提 postgresql バージョン9以上ぐらい? 結論 string_agg を使う 例)barテーブルのtype_idでgroup byしたときに、foo_nameカラムをカンマでひとまとめの文字列にする SELECT bar.type_id, string_agg(bar.foo_name, ‘, ‘) as foo_name_list FROM bar GROU…

Laravelのクエリービルダー(query builder)でLATERALを使う場合

例 DB::table('foo as f') ->leftJoin( DB::raw(" LATERAL ( SELECT MIN(goods.amount) as min_amount FROM goods WHERE foo.goods_id = goods_id ) as temp_min_amount "), DB::raw('1'), '=', DB::raw('1') ) ->select('f.*', 'temp_min_amount.min_amount…

postgresql jsonbの一部を更新する

方法 jsonb_setを使います。 例 fooテーブルのidが55 のデータに対し、 jsonb型カラムjsn_clmnの中身が {"a":{ "b": "bar"} だったものを {"a":{ "b": "nyaa"} に変える UPDATE foo SET jsn_clmn = jsonb_set(jsn_clmn, '{a,b}', '"nyaa"') WHERE id = 55 ; …

Postgresqlのデータベースコピー

■Postgresqlのデータベースコピー 例) source_dbをcopy_dbにコピーしたい場合 CREATE DATABASE copy_db TEMPLATE source_db;

postgresqlで不要なセッションを削除する

なるべく安全に削除したい SELECT * FROM pg_stat_activity where pid <> pg_backend_pid(); 上記で自分以外( pid <> pg_backend_pid() )の一覧を取得 backend_typeが「 client backend 」のもので、怪しいものを見つける。 該当のものを削除 SELECT pg_te…