Skip to content
This repository
tree: a8a60e9240
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 202 lines (174 sloc) 5.242 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
ActiveRecord::Schema.define do

  %w(postgresql_tsvectors postgresql_hstores postgresql_arrays postgresql_moneys postgresql_numbers postgresql_times postgresql_network_addresses postgresql_bit_strings postgresql_uuids
postgresql_oids postgresql_xml_data_type defaults geometrics postgresql_timestamp_with_zones postgresql_partitioned_table postgresql_partitioned_table_parent postgresql_json_data_type).each do |table_name|
    execute "DROP TABLE IF EXISTS #{quote_table_name table_name}"
  end

  execute 'DROP SEQUENCE IF EXISTS companies_nonstd_seq CASCADE'
  execute 'CREATE SEQUENCE companies_nonstd_seq START 101 OWNED BY companies.id'
  execute "ALTER TABLE companies ALTER COLUMN id SET DEFAULT nextval('companies_nonstd_seq')"
  execute 'DROP SEQUENCE IF EXISTS companies_id_seq'

  execute 'DROP FUNCTION IF EXISTS partitioned_insert_trigger()'

  execute "DROP SCHEMA IF EXISTS schema_1 CASCADE"

  %w(accounts_id_seq developers_id_seq projects_id_seq topics_id_seq customers_id_seq orders_id_seq).each do |seq_name|
    execute "SELECT setval('#{seq_name}', 100)"
  end

  execute <<_SQL
CREATE TABLE defaults (
id serial primary key,
modified_date date default CURRENT_DATE,
modified_date_function date default now(),
fixed_date date default '2004-01-01',
modified_time timestamp default CURRENT_TIMESTAMP,
modified_time_function timestamp default now(),
fixed_time timestamp default '2004-01-01 00:00:00.000000-00',
char1 char(1) default 'Y',
char2 character varying(50) default 'a varchar field',
char3 text default 'a text field',
positive_integer integer default 1,
negative_integer integer default -1,
decimal_number decimal(3,2) default 2.78,
multiline_default text DEFAULT '--- []

'::text
);
_SQL

  execute "CREATE SCHEMA schema_1"
  execute "CREATE DOMAIN schema_1.text AS text"
  execute "CREATE DOMAIN schema_1.varchar AS varchar"
  execute "CREATE DOMAIN schema_1.bpchar AS bpchar"

  execute <<_SQL
CREATE TABLE geometrics (
id serial primary key,
a_point point,
-- a_line line, (the line type is currently not implemented in postgresql)
a_line_segment lseg,
a_box box,
a_path path,
a_polygon polygon,
a_circle circle
);
_SQL

  execute <<_SQL
CREATE TABLE postgresql_arrays (
id SERIAL PRIMARY KEY,
commission_by_quarter INTEGER[],
nicknames TEXT[]
);
_SQL

  execute <<_SQL
CREATE TABLE postgresql_uuids (
id SERIAL PRIMARY KEY,
guid uuid,
compact_guid uuid
);
_SQL

  execute <<_SQL
CREATE TABLE postgresql_tsvectors (
id SERIAL PRIMARY KEY,
text_vector tsvector
);
_SQL

  if 't' == select_value("select 'hstore'=ANY(select typname from pg_type)")
  execute <<_SQL
CREATE TABLE postgresql_hstores (
id SERIAL PRIMARY KEY,
hash_store hstore default ''::hstore
);
_SQL
  end

  if 't' == select_value("select 'json'=ANY(select typname from pg_type)")
  execute <<_SQL
CREATE TABLE postgresql_json_data_type (
id SERIAL PRIMARY KEY,
json_data json default '{}'::json
);
_SQL
  end

  execute <<_SQL
CREATE TABLE postgresql_moneys (
id SERIAL PRIMARY KEY,
wealth MONEY
);
_SQL

  execute <<_SQL
CREATE TABLE postgresql_numbers (
id SERIAL PRIMARY KEY,
single REAL,
double DOUBLE PRECISION
);
_SQL

  execute <<_SQL
CREATE TABLE postgresql_times (
id SERIAL PRIMARY KEY,
time_interval INTERVAL,
scaled_time_interval INTERVAL(6)
);
_SQL

  execute <<_SQL
CREATE TABLE postgresql_network_addresses (
id SERIAL PRIMARY KEY,
cidr_address CIDR,
inet_address INET,
mac_address MACADDR
);
_SQL

  execute <<_SQL
CREATE TABLE postgresql_bit_strings (
id SERIAL PRIMARY KEY,
bit_string BIT(8),
bit_string_varying BIT VARYING(8)
);
_SQL

  execute <<_SQL
CREATE TABLE postgresql_oids (
id SERIAL PRIMARY KEY,
obj_id OID
);
_SQL

  execute <<_SQL
CREATE TABLE postgresql_timestamp_with_zones (
id SERIAL PRIMARY KEY,
time TIMESTAMP WITH TIME ZONE
);
_SQL

begin
    execute <<_SQL
CREATE TABLE postgresql_partitioned_table_parent (
id SERIAL PRIMARY KEY,
number integer
);
CREATE TABLE postgresql_partitioned_table ( )
INHERITS (postgresql_partitioned_table_parent);

CREATE OR REPLACE FUNCTION partitioned_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO postgresql_partitioned_table VALUES (NEW.*);
RETURN NULL;
END;
$$
LANGUAGE plpgsql;

CREATE TRIGGER insert_partitioning_trigger
BEFORE INSERT ON postgresql_partitioned_table_parent
FOR EACH ROW EXECUTE PROCEDURE partitioned_insert_trigger();
_SQL
rescue ActiveRecord::StatementInvalid => e
  if e.message =~ /language "plpgsql" does not exist/
    execute "CREATE LANGUAGE 'plpgsql';"
    retry
  else
    raise e
  end
end

  begin
    execute <<_SQL
CREATE TABLE postgresql_xml_data_type (
id SERIAL PRIMARY KEY,
data xml
);
_SQL
rescue #This version of PostgreSQL either has no XML support or is was not compiled with XML support: skipping table
  end

  create_table :limitless_fields, force: true do |t|
    t.binary :binary, limit: 100_000
    t.text :text, limit: 100_000
  end
end

Something went wrong with that request. Please try again.