cfgReadChar('system.oauth2_token'); $db_host = $savvyext->cfgReadChar('database.host'); $db_name = $savvyext->cfgReadChar('database.name'); $db_user = $savvyext->cfgReadChar('database.user'); $db_pass = $savvyext->cfgReadChar('database.pass'); $db_port = $savvyext->cfgReadLong('database.port'); $connstr = "host=${db_host} port=${db_port} dbname=${db_name} user=${db_user} password=${db_pass}"; $conn = pg_connect($connstr); $db_host = $savvyext->cfgReadChar('database_replica.host'); $db_name = $savvyext->cfgReadChar('database_replica.name'); $db_user = $savvyext->cfgReadChar('database_replica.user'); $db_pass = $savvyext->cfgReadChar('database_replica.pass'); $db_port = $savvyext->cfgReadLong('database_replica.port'); $readOnlyReplicaConnstr = "host=${db_host} port=${db_port} dbname=${db_name} user=${db_user} password=${db_pass}"; $readOnlyReplicaConn = pg_connect($readOnlyReplicaConnstr); $q = "SELECT * FROM address WHERE geometry IS NULL AND latitude!=0 AND longitude!=0"; $r = pg_query($readOnlyReplicaConn, $q); while ($f=pg_fetch_assoc($r)) { $data = [ "geometry" => "ST_SetSRID(ST_MakePoint(".$f["longitude"].",".$f["latitude"]."), 4326)" ]; list($res,$err) = updateAddress($f["id"], $data); if ($err && $err!="") { echo "[".date("Y-m-d H:i:s")."] Failure: ${err} (".$f["id"].")\n"; } else { echo "[".date("Y-m-d H:i:s")."] Complete: ".$f["id"]."\n"; } } function updateAddress($id, $data) { global $conn, $readOnlyReplicaConn; $columns = []; $q = "select column_name, data_type, character_maximum_length from INFORMATION_SCHEMA.COLUMNS where table_name = 'address'"; $r = pg_query($readOnlyReplicaConn, $q); while ($f=pg_fetch_assoc($r)) { $columns[$f['column_name']] = $f['data_type']; } $q = "UPDATE address SET id=${id}"; foreach ($data as $key=>$val) { if ($key=="id") continue; if (array_key_exists($key,$columns) && $columns[$key]!='character varying' && $columns[$key]!='date') { $q.= ", ${key} = ".($val==""?"NULL":$val); } else { $q.= ", ${key} = '".pg_escape_string($val)."'"; } } $q.= " WHERE id=${id} RETURNING *"; $r = pg_query($conn, $q); if ($r && pg_num_rows($r) && $f=pg_fetch_assoc($r)) { return [$f, NULL]; } return [NULL, pg_last_error($conn)]; } echo "[".date("Y-m-d H:i:s")."] GPS geometry_address job complete.\n";