技術メモのかけら

内容はもとより調べたことすら忘れてしまうので個人的なメモです。とにかく短く、結論だけ書いていきます。

PostgreSQL

PostgreSQLの識別子63バイト制限は別名にも適用される

試した環境: PostgreSQL 11 PostgreSQLのテーブル名や列名など識別子には最大63バイトの制限があり、それ以上の長さは切り捨てられる。 例えば、123456789A123456789B123456789C123456789D123456789E123456789F123456789Gと70バイトの名前をつけようとすると…

SQL中のVALUES

SELECT句が使える場所ならどこでもVALUESが使えるとのこと。 -- select 1,'one' union select 2,'two' union select 3,'three'と等価 postgres=# VALUES (1, 'one'), (2, 'two'), (3, 'three'); column1 | column2 ---------+--------- 1 | one 2 | two 3 | …

psqlのバックスラッシュコマンドで実行されているSQLを確認する

-Eオプション付きでpsql を起動すると、バックスラッシュコマンドの裏で実行されるSQLを確認できる。 $ psql -E psql (9.1.14) "help" でヘルプを表示します. bill=# \dn ********* クエリー ********** SELECT n.nspname AS "Name", pg_catalog.pg_get_user…

データを16進でダンプする

trimで消えない謎のスペースがあって、何なのか16進で見たいのでやり方を調べた。 select encode(name::bytea, 'hex') from human; これで調べたら, C2A0が入っていることが分かった。 HTMLで ってのはよく使うけど、これは文字コードのNBSP。 アプリの…

列の型をDateからVARCHARに変更する

またいつか必要かもしれないのでメモ。 ALTER TABLE table_name ALTER COLUMN column_name TYPE VARCHAR(8) USING CASE WHEN column_name IS null THEN null ELSE TO_CHAR(column_name, 'YYYYMMDD') END; USINGで条件分けをするパターンは他でも使えそう。

postgreSQLに接続するシェルのテンプレート

個人的メモ。 たくさんのDBにまとめて同じSQLを実行するテンプレート。 SQLをヒアドキュメントで書くようにしてるけど、長くなるようだったら外出しにしよう。 #!/bin/sh #DBサーバとインスタンスの指定 SETTINGS=("dbserv01 db01" "dbserv01 db02" "dbserv0…

psqlでデフォルトのスキーマを指定する

同じスキーマしか使わないのに毎回スキーマ指定するのがダルいので調べてみた。 まずは現在値の確認。 mydb=> show search_path; search_path ---------------- "$user",public (1 行) 何もいじってないのでデフォルト値が表示される。 スキーマ名を指定しな…