node

node.jsとは
pg_notify
トリガー
react.js
を使う
WebSocket

現状 postgresql でトリガーつくって
websocket使うか
node.js


postgres で 改行が入ったcsvからテーブルにコピーする時
カンマ区切り、改行が入ってて   が  になってるようなデータ。
¥copy mytable from ./mytable.csv delimiter CSV quote
postgresでノーブレークスペースがインサートできなくて困ったのでメモ。
状況
phpの開発でpostgresを利用し、ckeditorで編集した文字列を突っ込もうとしたらこんなエラーがでた。
character 0xc2a0 of encoding UTF8 has no equivalent in EUC_JP
原因はデータベースの文字コードがEUC-JPでphp側がUTF-8だったため。
エディタで編集した時にノーブレークスペースが混ざり、
postgresが自動エンコードする際にエラーが出てしまい、Insertできなかった。postgresの仕様でこの仕様自体は変更できない模様。
解決方法
php側でEUC-JPに変換するのは面倒臭かったので、
ノーブレークスペースを半角スペースに変換することを思いついた。
使うのはこの関数
mb_ereg_replace
マルチバイトで判定して置換してくれる!めったに使わないだろうけど、あってよかった!
インサートしたいデータをこんなかんじで置換する。
$str = mb_ereg_replace(“¥xC2¥xA0″ “ ” $str);
めでたくインサート出来ました!

CREATE TRIGGER timeline_update
AFTER INSERT
ON public.timeline
FOR EACH STATEMENT
EXECUTE PROCEDURE public.notify_trigger( timeline_update );

CREATE TRIGGER timeline_update
AFTER INSERT OR UPDATE OR DELETE
ON public.timeline
FOR EACH STATEMENT
EXECUTE PROCEDURE public.notify_trigger( timeline_update );

CREATE TRIGGER staff_schedule_trigger
AFTER INSERT OR UPDATE OR DELETE
ON staff_schedule
FOR EACH ROW
EXECUTE PROCEDURE notify_trigger();



BEGIN
IF TG_OP = UPDATE THEN
NEW.created := current_timestamp;
END IF ;
RETURN NEW;
END ;



CREATE OR REPLACE FUNCTION trigger_function_date_updater()
RETURNS trigger AS
$BODY$ BEGIN
IF TG_OP = UPDATE THEN
NEW.created := current_timestamp;
END IF ;
RETURN NEW;
END ;
$BODY$
LANGUAGE plpgsql VOLATILE;
ALTER FUNCTION trigger_function_date_updater() OWNER TO postgres;


CREATE OR REPLACE FUNCTION trigger_function_date_updater()
RETURNS trigger AS
$BODY$ BEGIN
IF TG_OP = UPDATE THEN
NEW.created := current_timestamp;
END IF ;
RETURN NEW;
END ;
$BODY$
LANGUAGE plpgsql VOLATILE;
ALTER FUNCTION trigger_function_date_updater() OWNER TO postgres;

CREATE OR REPLACE FUNCTION trigger_function_date_updater()
RETURNS trigger AS
$BODY$ BEGIN
IF TG_OP = UPDATE THEN
NEW.created := current_timestamp;
END IF ;
RETURN NEW;
END ;
$BODY$
LANGUAGE plpgsql VOLATILE;
ALTER FUNCTION trigger_function_date_updater() OWNER TO postgres;

CREATE OR REPLACE FUNCTION trigger_function_date_updater()
RETURNS trigger AS
$BODY$ BEGIN
IF TG_OP = UPDATE THEN
NEW.created := current_timestamp;
END IF ;
RETURN NEW;
END ;
$BODY$
LANGUAGE plpgsql VOLATILE;
ALTER FUNCTION trigger_function_date_updater() OWNER TO postgres;

トリガ関数とトリガは違う

node.js インストールからね

https://liginc.co.jp/web/programming/node-js/85318
https://gist.github.com/okwrtdsh/06645a4d8ef5ff2c72e6


https://liginc.co.jp/web/programming/node-js/85318
https://gist.github.com/okwrtdsh/06645a4d8ef5ff2c72e6
http://www.dbonline.jp/mysql/trigger/index1.html
public array PDO::pgsqlGetNotify ([ int $result_type = PDO::FETCH_USE_DEFAULT [ int $ms_timeout = 0 ]] )
Returns a result set representing a pending asynchronous notification.
http://cryks.hateblo.jp/

react導入の障壁
node.js
react-tool
browserify
webpack

reactは
・MVCのVIew部分を担当
・簡単にいうと DOMの更新とイベントハンドリングをやってくれるライブラリ
・reactではDOMの更新に仮想DOMをつかっている
・仮想DOMは更新が必要な個所を自動的に計算して実際のDOMを更新する
reactはコンポーネントという単位でUIパーツをつくる
コンポーネントはUIパーツのロジックとマークアップが1か所に定義したもの
jsxはhtmlに似ているが属性名などは異なる場合があるので注意が必要
html の class
→ jsxでは className
htmlの for
→ jsxでは、htmlFors
jsxのいいところ
htmlと似ているので理解しやすい
コンポーネントの構造がわかりやすい

■pug(jade) ejsなどHTMLテンプレートエンジンの知識
■UI/UX、インタラクションデザイン等の知識
■React.js Vue.js Angular等を用いたフロ


コンポーネント内では this.stats を使って内部状態参照する

setStateを使って内部状態を更新する

最新の技術はエンジニア募集すると人がいないので、高くつく
自分勝手にいきていい