Friday, March 17, 2017

Install Redmine

gem install passenger --no-ri --no-rdoc
passenger-install-nginx-module

http://coderazzi.net/linux/debian/redmine.htm

Thursday, February 9, 2017

Function slower than query direct Postgres

For queries on tables with even data distribution, this will generally be no problem and PL/pgSQL functions will perform somewhat faster than raw SQL queries or SQL functions. But if your query can use certain indexes depending on the actual values in the WHERE clause or, more generally, chose a better query plan for the particular values, you may end up with a sub-optimal query plan.
(source: http://stackoverflow.com/questions/9305133/why-does-postgresql-treat-my-query-differently-in-a-function)

RETURN QUERY : cache plan
RETURN QUERY EXECUTE: replan for each call

RETURN QUERY EXECUTE $$
//query body
$$ USING param1, param2

Saturday, February 4, 2017

Monday, January 30, 2017

Thursday, January 12, 2017

Connect internet when using OpenVPN - Ubuntu 16.04

1. Setup OpenVPN using network manager

2. Open termainal, type
default_gateway=$(/sbin/ip route | awk '/default/ { print $3 }')
arr=(`echo ${default_gateway}`);
#echo "${arr[1]}"
sudo route add default gw "${arr[1]}"  wlp62s0
sudo route add -net 10.0.0.0 netmask 255.255.255.0 dev tun0

wlp620: main card connect internet (wifi or cable)
tun0: virtual interface of VPN connection
10.0.0.0 : base ip of VPN connection (ex: 10.0.0.3)


3. Save as changegateway
4. chmod +x changegateway
5. ./changegateway

Monday, September 26, 2016

Gluster on Debian

Remote all installation and config of gluster
apt-get purge --auto-remove glusterfs-server

Install gluster on servers, (server1, server2)
apt-get install glusterfs-server

On server1
gluster peer probe server2

On server2
gluster peer probe server1

On server1
gluster volume create gv0 replica 2 server1:/path/to/folderserver1 server2:/path/to/folderserver2

gluster volume start gv0 

On server2
mount -t glusterfs server2:/gv0 /path/to/sharedir 

sharedir is represent for broadcast to 2 folderserver1 and folderserver2, data store in sharedir is replicated to folderserver1 and folderserver2

Add column to all tables same schema

CREATE OR REPLACE FUNCTION add_version_column_to_all_tables()
RETURNS VOID
AS $$
DECLARE
 my_row RECORD;
BEGIN
 FOR my_row IN
 SELECT *
 FROM information_schema.tables
 WHERE table_schema = 'public' AND table_type='BASE TABLE'
 LOOP
 IF NOT EXISTS
 (
 SELECT attname FROM pg_attribute WHERE attrelid =
 (SELECT oid FROM pg_class WHERE relname = my_row.table_name )
 AND attname = 'subtenant'
 )
 THEN
     IF EXISTS
     (
         SELECT attname FROM pg_attribute WHERE attrelid =
         (SELECT oid FROM pg_class WHERE relname = my_row.table_name )
         AND attname = 'tenantid'
     )
     THEN
         EXECUTE('ALTER TABLE ' || my_row.table_name || ' ADD COLUMN subtenant text;');
         EXECUTE('UPDATE ' || my_row.table_name || ' SET subtenant = tenantid;');
     END IF;
 END IF;
 END LOOP;
END
$$
LANGUAGE plpgsql;

SELECT add_version_column_to_all_tables();