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を使って内部状態を更新する
最新の技術はエンジニア募集すると人がいないので、高くつく
自分勝手にいきていい