Skip to content

Instantly share code, notes, and snippets.

View robertsosinski's full-sized avatar

Robert Sosinski robertsosinski

View GitHub Profile
@robertsosinski
robertsosinski / gist:4417305
Created December 31, 2012 04:12
Color Pry prompt according to environment, put this at the bottom of your config/environment.rb file and specify "prompt_color" in the config/<environment> file with config.prompt_color = <environment>.
# Color Pry prompt according to environment
old_prompt = Pry.config.prompt
color = {
:red => "31m",
:green => "32m",
:yellow => "33m",
:blue => "34m",
:purple => "35m",
:cyan => "36m"
@robertsosinski
robertsosinski / db.rake
Created December 25, 2012 15:23
Database rake tasks for Sequel
namespace :db do
desc "Migrates the database to the target version, or to the lastest version if no target is given"
task :migrate, [:target, :current] => :environment do |t, args|
opts = {}
opts[:target] = args[:target].to_i if args[:target]
opts[:current] = args[:current].to_i if args[:current]
Sequel::Migrator.run(DB, "db/migrate", opts)
Rake::Task["db:dump"].invoke if Rails.env.development?
end
@robertsosinski
robertsosinski / trigger.sql
Created November 12, 2012 02:51
Make a table readonly in Postgres
create trigger trades_readonly_trigger before insert or update or delete or truncate on trades for each statement execute procedure readonly_trigger_function();
@robertsosinski
robertsosinski / gist:3976587
Created October 29, 2012 21:14
See blocked queries and the queries that are blocking them in Postgres.
with
blocked as (
select
pl.transactionid,
pl.pid blocked_pid, pl.mode blocked_mode,
psa.usename blocked_user, psa.application_name blocked_application,
now() - psa.query_start blocked_duration, psa.xact_start blocked_xact_start, psa.query_start blocked_query_start,
psa.current_query blocked_statement
from pg_stat_activity psa
inner join pg_locks pl on pl.pid = psa.procpid
@robertsosinski
robertsosinski / postgres_session_store.rb
Created October 11, 2012 00:36
A Postgres ActiveRecord::SessionStore::SqlBypass library for Rails
class PostgresSessionStore < ActiveRecord::SessionStore::SqlBypass
@@session_id_column = 'id'
@@schema_name = 'system'
cattr_accessor :schema_name
class << self
def marshal(data)
::Base64.encode64(Marshal.dump(data)).chomp if data
end
@robertsosinski
robertsosinski / keyvalue.sql
Created October 8, 2012 20:23
Useful key/value functions for PostgreSQL
create or replace function set_keyval(tablename varchar, keyname varchar, valuestring text, schemaname varchar default 'public') returns table(key varchar, value text, created_at timestamp, updated_at timestamp) as $$
begin
return query execute 'update '||quote_ident(schemaname)||'.'||quote_ident(tablename)||' set value = $2, updated_at = now() where key = $1 returning *' using keyname, valuestring;
if not found then
return query execute 'insert into '||quote_ident(schemaname)||'.'||quote_ident(tablename)||' (key, value, created_at, updated_at) values ($1, $2, now(), now()) returning *' using keyname, valuestring;
end if;
end;
$$ language 'plpgsql';
create or replace function get_keyval(tablename varchar, keyname varchar, schemaname varchar default 'public') returns table(key varchar, value text, created_at timestamp, updated_at timestamp) as $$
@robertsosinski
robertsosinski / gist:3834827
Created October 4, 2012 16:37
Example crosstab function
SELECT c.id, c.name, c.jan, c.feb, c.mar
FROM crosstab(
'select buyers.id, buyers.name, transactions.month, sum(transactions.amount) from transactions inner join buyers on buyers.id = transactions.buyer_id group by buyers.id, buyers.name, transactions.month order by buyers.id, transactions.month',
'select generate_series(1, 3)'
) c (id integer, name character varying, jan numeric(12,2), feb numeric(12,2), mar numeric(12,2));
@robertsosinski
robertsosinski / inventory.rb
Created September 29, 2012 17:15
Nesting ActiveRecord models into separate schemas
module Inventory
class Base < ActiveRecord::Base
self.abstract_class = true
self.table_name_prefix = 'inventory.'
end
end
@robertsosinski
robertsosinski / parser.erl
Created July 28, 2012 18:23
Erlang Pattern Matching and Function Guarding
-module(parser).
-export([parse/1]).
% Example 1:
%
% Tuple1 = {person, [
% {name, [{first, "Robert"}, {last, "Sosinski"}]},
% {home, [{city, "Hoboken"}, {state, "New Jersey"}]},
% {info, [{age, 30}, {hobbies, [saxophone, beer, french]}]}
% ]}.
@robertsosinski
robertsosinski / gist:3035806
Created July 2, 2012 21:25
PostgreSQL Listen/Notifiy
require 'rubygems'
require 'pg'
require 'eventmachine'
module Subscriber
def initialize(pg)
@pg = pg
end
def notify_readable