環境
- mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
設定を行うコマンド
- /etc/my.cnf の [mysqld] に記述することで全クエリをログ出力する。
- general_log でオンにし、general_log_file でログファイルパスを指定する。
- ログローテートは、もともとある /etc/logrotate.d/mysqld をほぼそのまま使用した。
Linux の悪戦苦闘記、プログラミング、WordPress、ウェブサービス、Windows、Mac などの話題ですの。
MySQL では接続コマンドと同時にパスワードを渡してログインすることが可能です。mysql -u root -ppassword という書き方ですわね。
PostgreSQL ではどうかしら?ヘルプを見てみましても、存在しません。調べてみたところ、簡単に書ける方法がございましたので、メモいたします。
# mysql -u root -ppassword のように 1 行で PostgreSQL にログイン PGPASSWORD=password psql -U postgres # おまけ。ヒアドキュメントを使って、スーパーユーザ (postgres) にパスワード設定 su - postgres <<EOT psql -U postgres Alter USER postgres encrypted password 'vagrant'; \q exit EOT # ヒアドキュメントを使って、DB 作成 PGPASSWORD=password psql -U postgres <<EOT CREATE USER user1 WITH NOSUPERUSER NOCREATEDB NOCREATEROLE PASSWORD 'password1'; CREATE DATABASE db1 WITH OWNER user1 ENCODING 'UTF8'; EOT
# bare リポジトリとしてクローン git clone --bare <repository>
Nexus 端末のクリーンインストールや、ファクトリーイメージの導入頬は次の公式ページを見れば足りそう。
# 準備 brew update # Homebrew を使った Vim インストール # ターミナル再起動または新規タブでの利用でも反映される。 brew install vim # パス設定を確認 which vim # バージョン確認 vim --version # Homebrew の Vim アンインストール brew uninstall vim
GitHub リポジトリを作成してからソリューションを作成する、という順番をしっかりと意識したいですわ♪
vagrant ssh するとパスワードを求められる。
# @target に yyyymm を指定することで、その月の月初から月末までの日にちリストを返す。
SET @target = STR_TO_DATE('201601', '%Y%m');
SET @firdt_day = DATE_FORMAT(@target, '%Y-%m-01');
SET @last_day = DATE_FORMAT(LAST_DAY(@firdt_day), '%Y-%m-%d');
SELECT DATE_FORMAT(day, '%Y-%m-%d')
FROM
(
SELECT (@dt := @firdt_day) AS day FROM DUAL UNION ALL
SELECT @dt := DATE_ADD(@dt, INTERVAL 1 DAY) FROM `information_schema`.COLUMNS WHERE @dt < @last_day
) AS tmp;
SQL で存在するレコードが取得できます。存在しないレコードは穴埋めされません。
そうしますと、とある年月の一日から月末までレコードを取得したいのに、存在しないために歯抜けになってしまった、そんなケースに遭遇しました><。
歯抜けをなくして、存在しないレコードも埋めたいのです。
今回は、指定年月の一日から末日までのリストを返す MySQL をノートいたします。
2016年8月14日18時00分追記。シンプル・日付特化版を投稿いたしました♪
SET @target = STR_TO_DATE('201601', '%Y%m');
SET @firdt_day = DATE_FORMAT(@target, '%Y-%m-01');
SELECT DATE_FORMAT(DATE_ADD(@firdt_day, INTERVAL tmp.generate_series DAY), '%Y-%m-%d') AS day
FROM
(
SELECT 0 generate_series FROM DUAL WHERE (@num:=-1)*0 UNION ALL
SELECT @num:=@num+1 FROM `information_schema`.COLUMNS
) AS tmp
HAVING DATE_FORMAT(day, '%Y%m') = DATE_FORMAT(@target, '%Y%m');