Advertisement
Guest User

Untitled

a guest
May 24th, 2015
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.61 KB | None | 0 0
  1. echo master shard_{0,1,2,3} | xargs -n1 /usr/local/bin/dropdb -p 6432 -h /tmp -U postgres
  2. echo master shard_{0,1,2,3} | xargs -n1 /usr/local/bin/createdb -p 6432 -h /tmp -U postgres
  3.  
  4. for a in {0..3}; do
  5. echo "
  6. CREATE TABLE users (id serial PRIMARY KEY, username TEXT NOT NULL);
  7. ALTER SEQUENCE users_id_seq INCREMENT BY 4 RESTART WITH $a;
  8. " | /usr/local/bin/psql -p 6432 -h /tmp -U postgres -d shard_$a;
  9. done
  10.  
  11. cat <<'EOF' | /usr/local/bin/psql -p 6432 -h /tmp -U postgres -d master
  12.  
  13. CREATE TABLE users (id serial PRIMARY KEY, username TEXT NOT NULL);
  14. CREATE EXTENSION postgres_fdw;
  15.  
  16. CREATE SERVER shard_0 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'shard_0', host '/tmp', port '6432');
  17. CREATE SERVER shard_1 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'shard_1', host '/tmp', port '6432');
  18. CREATE SERVER shard_2 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'shard_2', host '/tmp', port '6432');
  19. CREATE SERVER shard_3 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'shard_3', host '/tmp', port '6432');
  20.  
  21. CREATE USER MAPPING FOR POSTGRES SERVER shard_0 OPTIONS (user 'postgres');
  22. CREATE USER MAPPING FOR POSTGRES SERVER shard_1 OPTIONS (user 'postgres');
  23. CREATE USER MAPPING FOR POSTGRES SERVER shard_2 OPTIONS (user 'postgres');
  24. CREATE USER MAPPING FOR POSTGRES SERVER shard_3 OPTIONS (user 'postgres');
  25.  
  26. CREATE FOREIGN TABLE users_shard_0 () INHERITS (users) SERVER shard_0 OPTIONS (table_name 'users');
  27. CREATE FOREIGN TABLE users_shard_1 () INHERITS (users) SERVER shard_1 OPTIONS (table_name 'users');
  28. CREATE FOREIGN TABLE users_shard_2 () INHERITS (users) SERVER shard_2 OPTIONS (table_name 'users');
  29. CREATE FOREIGN TABLE users_shard_3 () INHERITS (users) SERVER shard_3 OPTIONS (table_name 'users');
  30.  
  31. ALTER FOREIGN TABLE users_shard_0 ADD CHECK (id % 4 = 0);
  32. ALTER FOREIGN TABLE users_shard_1 ADD CHECK (id % 4 = 1);
  33. ALTER FOREIGN TABLE users_shard_2 ADD CHECK (id % 4 = 2);
  34. ALTER FOREIGN TABLE users_shard_3 ADD CHECK (id % 4 = 3);
  35.  
  36. CREATE OR REPLACE FUNCTION __trigger_users_before_insert(
  37. ) RETURNS trigger AS $__$
  38.  
  39. BEGIN
  40. EXECUTE $$
  41. INSERT INTO $$ || ('users_shard_' || (NEW.id % 4)::text)::regclass || $$ VALUES (
  42. $1, $2
  43. )
  44. $$ USING
  45. NEW.id,
  46. NEW.username;
  47.  
  48. RETURN null;
  49. END;
  50.  
  51. $__$ LANGUAGE plpgsql;
  52.  
  53. CREATE TRIGGER users_before_insert BEFORE INSERT ON users FOR EACH ROW EXECUTE PROCEDURE __trigger_users_before_insert();
  54.  
  55. INSERT INTO users (username) SELECT 'random user ' || i FROM generate_series(1, 100) i;
  56.  
  57. SELECT * FROM users_shard_0 LIMIT 10;
  58. SELECT * FROM users_shard_1 LIMIT 10;
  59. SELECT * FROM users_shard_2 LIMIT 10;
  60. SELECT * FROM users_shard_3 LIMIT 10;
  61.  
  62. EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement