MW211 EXIT

devlog
PostgreSQL/大量のINSERT
2018年05月22日
plain(平文)形式でバックアップしたところ、大量のINSERT文を取得してしまった。
これを別DBへ移行するため投入したいのだが。。。

やり方は以下の三つ。
┌─┬────────────────────────────────────┐
│①│インサート                                                              │
│  │「INSERT INTO "表"(列) VALUES (値);」を何回も実行する                   │
│  │数千件レベルまで                                                        │
├─┼────────────────────────────────────┤
│②│バルクインサート                                                        │
│  │「INSERT INTO "表"(列) VALUES (値),(値),…;」                           │
│  │数十万件レベルまで                                                      │
├─┼────────────────────────────────────┤
│③│コピー                                                                  │
│  │「COPY "表" FROM '入力.csv' WITH CSV;」                                 │
│  │数百万件レベルでもいける                                                │
└─┴────────────────────────────────────┘

①は取得したINSERT文をそのままコピペして実行するパターン。
最も簡単で、件数が少ないならこれがお勧め。

②はINSERT文を編集する必要あり。
前の行の末尾の「;」から次の行の「VALUES」までを「,」に置換してやればよい。
これもコピペでいける。
数十万件レベルならこれがお勧め。(①との差は歴然)

極端に件数が多いのであれば、INSERT文はあきらめる
③のパターン。
(というか、INSERTでデータ取得したこと自体がある意味おかしな感じになってしまう)
INSERT文の前後を上手に置換して、CSV形式にする。
その上で、COPY文で取り込む。
手続きがめんどくさいが、それだけの件数ということなので致し方なし。
分類:PostgreSQL
PostgreSQL/pgAdmin4クエリ初期化エラー
2018年05月21日
テーブルの右クリックメニューから「クエリツール...」を選んで
クエリツールを起動すると以下のエラーが発生する。
┌───────────────────┐
│Alertifyjs                            │
├───────────────────┤
│Query Tool Initialize Error           │
└───────────────────┘
日本語に翻訳した場合は以下。
┌───────────────────┐
│Alertifyjs                            │
├───────────────────┤
│クエリツール初期化エラー              │
└───────────────────┘

対応方法としては以下の二つ
(a) 本メニューは使わない。
    メニューバーの「ツール」→「クエリツール」を実行すればよい。
(b) 同右クリックメニューから「Count Rows」を実行してから、
    本「クエリツール...」を実行する
分類:PostgreSQL
PostgreSQL/pgAdmin4起動エラー
2018年05月19日
pgAdmin4を起動したら以下のエラーが出た。
┌───────────────────────┐
│Fatal error                                   │
├───────────────────────┤
│The application server could not be contacted │
└───────────────────────┘
「C:\Users\(ユーザ名)\AppData\Roaming\pgAdmin」の中を空にしたら直った。

「pgAdmin」の中の「pgadmin4.db」が主要因の模様(これだけの削除でもOK)。

但し、「pgadmin4.db」を削除すると、パスワードの記録や日本語化設定は
クリアされてしまう。(再設定が必要)
分類:PostgreSQL
jQuery/Ajaxのキャッシュ防止
2018年05月17日
「$.get();」などでAjaxでデータを反映させる場合、
ブラウザ上のキャッシュにデータが保存される場合がある。

一旦保存されてしまうと、再読込しても、変更したものが反映されない。

それを防ぐ方法。
┌──────────────────────────────────────┐
│$.ajaxSetup({cache:false});                                                 │
└──────────────────────────────────────┘
上記を直前に実行してあげればよい。

以下のような感じになる。
┌──────────────────────────────────────┐
│$.ajaxSetup({cache:false});                                                 │
│$.get(                                                                      │
│    // 略                                                                   │
│);                                                                          │
└──────────────────────────────────────┘
分類:jQuery
jQuery/エスケープ・アンエスケープの裏技
2018年05月13日
上記のような感じで、.text()と.html()を組み合わせると変換ができるようだ。
┌───────┬──────────────────────────────┐
│エスケープ    │エスケープ後 = $('<div\/>').text(エスケープ前).html();      │
├───────┼──────────────────────────────┤
│アンエスケープ│エスケープ前 = $('<div\/>').html(エスケープ後).text();      │
└───────┴──────────────────────────────┘
ただ、ダミーでdivタグを用いるので、
あまりお勧めはできない模様(多用するとパフォーマンスに影響がありそう)。
分類:jQuery
jQuery/エスケープ有無と出力
2018年05月12日
エスケープの有無と.text()および.html()の関係は以下の通り。
┌──────────────┬───────┬───────────────┐
│           入力元           │     動作     │             結果             │
├──────────────┼───────┼───────────────┤
│以下を未エスケープ          │.html()で出力 │×XSS対策漏れ                 │
│<script>alert("@");</script>│              │  JavaSciptが動作             │
│                            │              │  (「@」ダイアログが出力)     │
├──────────────┼───────┼───────────────┤
│以下をエスケープ済み        │.html()で出力 │○OK                          │
│<script>alert("@");</script>│              │  文字列として以下が表示      │
├──────────────┼───────┤  <script>alert("@");</script>│
│以下を未エスケープ          │.text()で出力 │                              │
│<script>alert("@");</script>│              │                              │
├──────────────┼───────┼───────────────┤
│以下をエスケープ済み        │.text()で出力 │×文字化け                    │
│<script>alert("@");</script>│              │  文字列として以下が表示      │
│                          &lt;script&gt;alert(&quot;@&quot;);&lt;/script&gt;│
└──────────────┴───────┴───────────────┘
分類:jQuery
Smarty/エラーログ
2018年05月11日
「Notice:  Undefined index: 変数 in ~」
Smartyにて、上記のような変数未定義エラーなど様々なエラーがあるが、
それをエラーログに出して、確認できないかと考えた。

よくよく調べてみたら、これらはPHPのエラーなので、
PHPのエラーログに出力されている。

よって、PHPのエラーログを見ればよいのだ。

エラーログは、「php.ini」に以下のような定義があるので、それを参照のこと。
┌──────────────────────────────────────┐
│error_log = PHPのエラーログの出力先                                         │
└──────────────────────────────────────┘
分類:Smarty
Smarty/変数未定義補填
2018年05月10日
┌──────────────────────────────────────┐
│{if $is他条件}{assign var="変数" value="0"}{/if}                            │
│                                                                            │
│{$変数}                                                                     │
└──────────────────────────────────────┘
上記のような場合、「$is他条件」が「false」だと、
「$変数」が未定義となりエラーとなる。
「Notice:  Undefined index: 変数 in ~」

こういった場合には、以下のように「isset()」で存在を判定して
補填してあげればよい。
┌──────────────────────────────────────┐
│{if !isset($変数)}{assign var="変数" value="0"}{/if}                        │
└──────────────────────────────────────┘

こんな感じになる
┌──────────────────────────────────────┐
│{if $is他条件}{assign var="変数" value="0"}{/if}                            │
│                                                                            │
│{if !isset($変数)}{assign var="変数" value="0"}{/if}                        │
│{$変数}                                                                     │
└──────────────────────────────────────┘
分類:Smarty
Smarty/変数
2018年05月09日
Smartyテンプレート中で変数を定義して使用する方法は以下の通り。
┌────┬─────────────────────────────────┐
│値の代入│{assign var="変数" value="値"}                                    │
├────┼─────────────────────────────────┤
│値の出力│{$変数}                                                           │
└────┴─────────────────────────────────┘
値を代入する時には「$」が要らない点に注意。

値を代入する際に、別変数を参照する場合には、{}をネストしてもよいし
そのまま変数を直書きしてもよい。
なお、{}の代わりに``も使える。
┌────┬─────────────────────────────────┐
│値の代入│{assign var="変数" value="$別変数"}                               │
├────┼─────────────────────────────────┤
│値の代入│{assign var="変数" value="{$別変数}"}                             │
├────┼─────────────────────────────────┤
│値の代入│{assign var="変数" value="`$別変数`"}                             │
└────┴─────────────────────────────────┘

なお、修飾子(escape修飾子など)をつける場合には、囲いが必要。
┌────┬─────────────────────────────────┐
│値の代入│{assign var="変数" value="{$別変数|escape}"}                      │
├────┼─────────────────────────────────┤
│値の代入│{assign var="変数" value="`$別変数|escape`"}                      │
└────┴─────────────────────────────────┘
囲わずに直書きすると、変数+「|escape」という文字列に解釈されてしまう。
分類:Smarty
Smarty/置換
2018年05月08日
下記のような感じで置換ができる。
┌──────────────────────────────────────┐
│{$変数|replace:'置換前':'置換後'}                                           │
└──────────────────────────────────────┘

他との併用も可能。
┌──────────────────────────────────────┐
│{$変数|replace:'置換前':'置換後'|escape}                                    │
└──────────────────────────────────────┘

なお、あくまでPHP上で置換するので、「\→\\」の置換は以下のように倍になる。
┌──────────────────────────────────────┐
│{$変数|replace:'\\':'\\\\'}                                                 │
└──────────────────────────────────────┘
分類:Smarty
前へ 1 … 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 … 156 次へ