PHP/Postgresql: Event Listener

<?php //===========notifier.sql: /* CREATE OR REPLACE FUNCTION public.notify_channel() RETURNS trigger AS $function$ BEGIN PERFORM pg_notify('channel_name', row_to_json(NEW)::text); RETURN NULL; END; $function$ LANGUAGE plpgsql; CREATE TRIGGER trigger_on_insert AFTER INSERT ON mytable FOR EACH ROW EXECUTE PROCEDURE notify_channel(); */ set_time_limit(0); //-- using PDO: $db = new PDO( 'pgsql:dbname=dbname host=host port=5432;options=--application_name=APPLICATION_NAME', 'user', 'password', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ] ); $db->exec('LISTEN channel_name'); while (true) { while ($db->pgsqlGetNotify(PDO::FETCH_ASSOC, 30000)) { echo json_encode($result).PHP_EOL; } } //-- using pg_connect: //<?php include '../conn.php'; set_time_limit(0); ob_end_clean(); pg_query($conn, 'LISTEN table_changed;'); while(true){ $notify = pg_get_notify($conn); if (!$notify) { echo json_encode(array('result'=>false, 'data'=>'No messages')).PHP_EOL; ob_flush(); flush(); sleep(1); } else { echo json_encode(array('result'=>true, 'process_id'=>$pid , 'pid' => pg_get_pid($conn), 'data' => $notify)).PHP_EOL; } }
Event Notify Listener made with PHP.

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.