仕事メモとか

仕事中に調べた情報とか知ったことをメモしています。
unixコマンド, vim, oracle, putty, postgresql, bash, EXCEL, python, SQL全般 など。
最近は tableau, movabletype とかも触ったりしています。
雑な読書感想とかはこちら

カテゴリ: PostgreSQL

ERROR:  canceling statement due to conflict with recovery  が出た

はい、あんまりpostgreSQL詳しく無いんですが、エラーが出たので調査。
エラーはたまに出る、selectのSQLが遅い、ということで環境っぽい。


調べてみたら、オートVACUUMが悪さをしていて、これのせいでレプリカで動かしてるselectがデカイときにselectを途中で諦めちゃってエラーになる模様。

根本的にはSQLのスピードアップしかなさそう。


参考:こちらに詳しく載ってる
https://qiita.com/fullsat_/items/e793379e9c10a25c2d1a
このエントリーをはてなブックマークに追加

bool_or と bool_and があるSQL

postgreSQLだけっぽいんですが、boolに関する便利な集約関数がありました。

超簡単説明:
bool_or : 内容が1つ以上trueならtrue
bool_and : 内容が全てtrueならtrue

はい、簡単ですね。

select bool_or(dat=1), bool_and(dat=1) from
(select 1 as dat union select 2 as dat) d_table

とやると、
bool_or はtrueが返り、
bool_and は2があるからfalseが返ります。

ハマると結構便利。

参考:
https://www.postgresql.jp/document/8.0/html/functions-aggregate.html 
このエントリーをはてなブックマークに追加


postgresqlでoracleのminusみたいなものを探したら、あった(except)

はい、もうタイトルのままなんですが、
postgresqlでは呼び方が変わっていました。

正確にはoracleがminusで、
postgresqlとSQLserverがexceptという表記法でした。
使い方は両方一緒なので、とても簡単。

select aaa from table1
minus
select aaa from table2

これで、table1に居るなかで、table2に居る人を除外(差集合)となります。
なにかの調査の時に、割と切り出しを行うためにminusを使ったりするので(あんまり正式な調査としては良くないのですが)、
最初ないのかな? と思ったけど、あってよかった。


参考:
http://www.sql-reference.com/select/except_minus.html
このエントリーをはてなブックマークに追加


ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list が出た


はい、postgreSQLを使ってる時にこのエラーが出ました。
文中に書いてある通り、

order by してるんだけど、selectにdistinctしてるんだよね、どうすんねん。
というような内容。

order by を辞めるか、distinctではなくgroup by などで明示的に絞るなどすればOKです。

または、サブクエリにして、そのあとorder byを掛ければいいのですが、
ここで地味な落とし穴。

postgreSQLはサブクエリに名前付けないとエラーになります。
oracleと同じ要領で単純に括弧で括っただけだと、今度はそっちのエラーになります。


参考:
https://codeday.me/jp/qa/20190620/1057543.html
http://workmemo.techblog.jp/archives/33958688.html
このエントリーをはてなブックマークに追加


brew install postgresql で、perl.h がどうのこうのでコケる

はい、macに環境を構築しようと四苦八苦しているのですが、
postgresqlをインストールしようとすると、なんかエラーでコケます。
postgresqlのバージョンは11です。


brew install postgresql
(略)
hecking tcl.h presence... yes
checking for tcl.h... yes
checking for perl.h... no
configure: error: header file is required for Perl

Do not report this issue to Homebrew/brew or Homebrew/core!

どうも、perlでエラーになるようなんですが、原因が良くわからない。

試しに、perlを個別にインストールしてみると上手くいく。
brew install perl

とりあえず単独でperl入れられたから、postgresql上は入れないようにしたい、
と思ってい調べたら、--without-perlというのがあるも、これはバージョン9.6以降は使えない。

ということで、以下の方法で除外したら上手く行きました。

brew edit postgresql
※--with-perl 行を除外

brew install postgresql

pipenv install -d


インストール内容のセットをedit出来るんですね。


参考:
https://github.com/petere/homebrew-postgresql/issues/44
https://github.com/petere/homebrew-postgresql/issues/41
https://github.com/hhvm/homebrew-hhvm/issues/122
https://github.com/Homebrew/linuxbrew-core/pull/13036
このエントリーをはてなブックマークに追加

↑このページのトップヘ