くわこのpermission denied.

WEBエンジニアの僕がぶつかった技術的な問題や発見のメモ

PostgreSQL

テーブルのコピーを作る方法

同じDB内にテーブルのコピーを作る方法。PostgreSQLだけど、他のDBも同じなんじゃないかな。 CREATE TABLE hoge_copy AS SELECT * FROM hoge ; これでhogeテーブルのコピー、hoge_copyテーブルの完成。 簡単っすね。 10年戦えるデータ分析入門 SQLを武器にデ…

PostgreSQLでupdate句をつかう時にjoinが使えない?

PostgreSQLのupdate文でjoinを挟んでいたら怒られたので、何かと思って調べたらupdate文ではjoinは使えないらしく、代わりに UPDATE hoge SET column = value FROM page WHERE hoge.hoge_id = page.hoge_id AND ~~~; のようにwhere句で hoge.hoge_id = page.…

PostgreSQLでDBをコピーする方法

PostgreSQLでDBをコピーしたので手順をシェア。基本的に $ createdb -T [コピー元のDB名] [コピー後のDB名] -U postgres で作れる。(権限によってはsudo必要かも)参照記事PostgreSQL でDB丸コピー - それマグで!takuya-1st.hatenablog.jp が、自分の場合 …

PostgreSQLで配列の要素数を出力する

PostgreSQLで配列の要素数を出力したくて、 「PostgreSQL integer[] count」とかでググったら PostgreSQL: Documentation: 9.1: intarrayこんな感じでicount()っていうの見つけたので SELECT id, icount(hoge) from hoge_table; ってやったら No function ma…

開発サーバーのテーブルを別サーバーのDBに突っ込むまでに調べたこと

久々にこういうコマンド触ったので忘れないようにメモ まずは開発サーバのPostgreSQLのテーブルを抜き取るのにpg_dumpを調べ直しました。 https://www.postgresql.jp/document/9.2/html/app-pgdump.html pg_dump -t [tabel_name] -U[user_name] [database_na…

SQLSTATE[42501]: Insufficient privilege: 7 ERROR: リレーション table_name への権限がありません

PostgreSQLで普通にselect文書いたらタイトルのような SQLSTATE[42501]: Insufficient privilege: 7 ERROR: リレーション table_name への権限がありません という初見のエラーが出て、Google先生に聞いてもよく分からなかったんですが、どうやら先月あたり…

PostgreSQLの配列をPHPの配列にしたり、PHPの配列をPostgreSQLの配列に変換したい。

タイトル通り PostgreSQLとPHPの配列を変換する関数 毎回思い出すの面倒なので、メモがてら共有 // phpの配列をpostgres用の配列に変換 private function toPostgreSqlArray($data) { return '{' . implode(',', $data) . '}'; } // postgresの配列をphpの配…

PostgreSQLで期間を絞って(○日前など)検索する方法

PostgreSQLで期間を絞って(○日前など)検索する方法 意外と知らないなーと思って調べたのでシェア。 例えば、一週間以内に更新があったユーザー出したいなーという時は SELECT * FROM member WHERE updated_at > now() - interval '1 week'; みたいな感じでお…

レプリケーションするためにpostgresql.confのlisten_addressesいじったらポスグレサーバー動かなくなった話。

レプリケーションするためにpostgresql.confのlisten_addressesいじったらポスグレサーバー動かなくなった話。 タイトル通り、レプリケーションするためにマスター側のpostgresql.confのlisten_addressesいじってポスグレ再起動したら動かなくなってて、何が…

pg_basebackupでPostgreSQLのデータ入れ替えたら動かなくなった時のメモ

pg_basebackupでマスターサーバのデータをスレーブにコピーしてきたときに詰まったのでメモがてらシェア。一旦postgresを止めてからdataフォルダを入れ替える。 service postgresql stop /usr/pgsql-9.3/bin/pg_basebackup -h xxx.xxx.xxx.xxx -Upostgres -D…

psqlしたら could not change directory to "/home/development": 許可がありません

psql コマンド使ったら could not change directory to "/home/development": 許可がありません って出たので何かと思ったら、 sudo su postgres ではなく、 sudo su - postgres でpostgresユーザーになれば解決するらしい。

【PostgreSQL】CREATE INDEX ms_ward_geo_idx ON ms_ward USING gist (geo); とは??

stgのpostgresにデータ流し込んでたら、 CREATE INDEX ms_ward_geo_idx ON ms_ward USING gist (geo); ERROR: data type point has no default operator class for access method "gist" HINT: You must specify an operator class for the index or define …

PostgreSQLでバックアップを取る方法

PostgreSQLでバックアップを取る方法 PostgreSQLのバックアップ&リストア手法その1 (2/3) 使えば分かるPostgreSQL運用&チューニング(4):PostgreSQLのバックアップ&リストア手法その1 (2/3) - @ITこれ見て pg_dump -U [dbuser_name] [database_name] >…

PostgreSQLでERROR: "order"またはその近辺で構文エラー???

PostgreSQLでERROR: "order"またはその近辺で構文エラー PostgreSQLでINSERTしようとしたらERROR: "order"またはその近辺で構文エラーというエラーが出て、なんでやねんと思ったら、 orderはPostgreSQLの予約語なので、カラム名orderはそもそも推奨されてい…

PostgreSQLに.sqlファイルを読み込ませる方法

PostgreSQLに.sqlファイルを読み込ませる方法 他のDBからdumpしてきたものをうまく読み込ませる方法ないかなと思ってたら psql -U user_name -d db_name < hoge.sqlだけでいけた。

PostgreSQLでERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)

utf-8でpostgresのDBを作成しようと思って CREATE DATABASE hoge ENCODING 'utf8' ; ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII) HINT: Use the same encoding as in the template database, or us…

PostgreSQLでカラムを複数追加する方法

PostgreSQLでカラムを複数追加する方法 PostgreSQLの場合、MySQLなどとは書き方が違うらしく、 ALTER TABLE [テーブル名] ADD [カラム名] [型], ADD [カラム名] [型], ADD [カラム名] [型], ....; という文法で ALTER TABLE member ADD created_at timestamp…

PostgreSQLでカラムの型を配列型に変更する方法

PostgreSQLでカラムの型を配列型に変更する方法 がないかなと思って調べたのでメモカラムを間違えてinteger型にしてしまったけど、本当はinteger[]型じゃないと行けなかった場合、 ALTER TABLE hoge_table ALTER COLUMN hoge_column TYPE INTEGER[] USING '{…

【SQL】where <カラム名> = NULLがうまくいかない

SELECT * FROM WHERE カラム名> = NULL でSQL叩いたらエラーにはならないけど、全くデータ取れない!って状態で???状態韃靼ですけど、 where句でNULLを取る場合はカラム名> IS NULLにしないといけないんですね。いつもフレームワークのクエリービルダーに…

【Laravel】レコードがあったらUpdate、無ければInsertする方法

LaravelでレコードがあったらUpdate,無ければInsertする方法を思いついたのでメモ。 $member = Member::firstOrNew(['member_id' => 00001]); $member->name = '太郎'; $member->save();firstOrNew()はレコードがあれば取ってきて、無ければnewしてくれるの…

LaravelでPostgreSQLの配列型カラムに対してwhereを使う

LaravelでPostgreSQLの配列型のカラムに対してwhereを使うには $sql->where('カラム名', '>=', '{' . $hoge . '}')的な書き方が必要。 (・$hogeは配列ではなく普通のstring型など。 ・包含しているものを出したいときは'>=',完全一致の場合'=')他にもっとい…

LaravelでtoArray()を使うとTrailing dataが出る

Laravelでsqlから吐き出されたやたら長いオブジェクトをきれいな連想配列にしてくれるtoArrayメソッドですが、たまにTrailing dataというエラーが出ます。 これ、なんなのかなーと思っていたらsql文でselectしたカラムの中に小数点以下の秒数を持つtimestamp…

LaravelでJOIN ON を使う

hogeテーブルのレコードに対して、pageテーブルのレコードを削除フラグ is_deleted = 0 だったら 結合したい場合、Laravelでは $sql->leftjoin('page', function($join){ $join->on('page.hoge_id', '=', 'hoge.hoge_id') ->where('page.is_deleted', '=', 0…

【Laravel】orderByでnullを最後に持ってくる

Laravel使ってて、orderByしたら、nullを持ってるデータが最初に来て鬱陶しかったので方法ないかと探すこと2時間。 $sql = $sql->orderByRaw(DB::raw($column.' '.$sort.' NULLS LAST')); ちなみにDBはPostgreSQLなので他のSQLでは他の方法が有ると思われま…

pgadminでcsvファイルを取り込む方法

詰まったのでメモ SQL入力で COPY [テーブル名] from [csvファイルパス] with CSV;でcsvファイルでは1行目にカラム名を書く必要はなく(書くとエラー)いきなりデータを書き込む。 また、postgresがあるサーバーにcsvファイルを移しておく。(自分は普通に気…

【Laravel】Laravelで型の違う値でテーブルをjoinする方法 ('SQLSTATE[42883]: Undefined function: 7 ERROR: operator does not exist)

Laravelで型の違う値でテーブルをjoinする方法 laravel4でテーブルをjoinしたらタイトルのようなエラーが。 production.ERROR: exception 'Illuminate\Database\QueryException' with message 'SQLSTATE[42883]: Undefined function: 7 ERROR: operator does…

SQLでランダムに抽出

ランダムに20件のデータを抽出するには SELECT * FROM {table名} ORDER BY RAND() LIMIT 20; で書ける。 ランダム関数はMySQLではRAND()でPostgresではRANDOM()で書ける。けど先輩に聞いた話だと、SQLのランダムは遅いらしいので、普通にPHPなどにランダム…