sql >> Databáze >  >> RDS >> PostgreSQL

Mohu psát funkce PostgreSQL na Ruby on Rails?

Tato část vaší otázky:

Vím, že to můžeme vytvořit ručně v PostgreSQL, ale "kouzlo" s Active Record spočívá v tom, že databázi lze znovu vytvořit se všemi modely.

říká mi, že opravdu hledáte způsob, jak integrovat funkce PostgreSQL s normálním procesem migrace Rails a úlohami Rake, jako je db:schema:load .

Přidávání a odebírání funkcí při migracích je snadné:

def up
  connection.execute(%q(
    create or replace function ...
  ))
end

def down
  connection.execute(%q(
    drop function ...
  ))
end

Musíte použít samostatný up a down metody namísto jediné change protože ActiveRecord nebude mít ponětí, jak použít, natož zvrátit vytvoření funkce. A použijete connection.execute k načtení nezpracované definice funkce do PostgreSQL. Můžete to také provést pomocí reversible uvnitř change :

def change
  reversible do |dir|
    dir.up do
      connection.execute(%q(
        create or replace function ...
      ))
    end
    dir.down do
      connection.execute(%q(
        drop function ...
      ))
    end
  end
end

ale přijde mi to hlučnější než up a down .

Nicméně schema.rb a obvyklé úlohy Rake, které pracují s schema.rb (například db:schema:load a db:schema:dump ) nebude vědět, co dělat s funkcemi PostgreSQL a dalšími věcmi, kterým ActiveRecord nerozumí. Existuje způsob, jak to obejít, můžete se rozhodnout použít structure.sql namísto schema.rb nastavením:

config.active_record.schema_format = :sql

ve vašem config/application.rb soubor. Poté db:migrate zapíše db/structure.sql soubor (což je jen nezpracovaný SQL výpis vaší PostgreSQL databáze bez vašich dat) namísto db/schema.rb . Pro práci s structure.sql budete také používat různé úlohy Rake :

  • db:structure:dump místo db:schema:dump
  • db:structure:load místo db:schema:load

Vše ostatní by mělo fungovat stejně.

Tento přístup vám také umožňuje používat ve vaší databázi další věci, kterým ActiveRecord nebude rozumět:ZKONTROLUJTE omezení, spouštěče, výchozí hodnoty sloupců, které nejsou jednoduché, ...



  1. Jak zvládnu otevření/zavření připojení Db v aplikaci Go?

  2. Jak vytvořit tabulku pomocí GUI v SQL Server - SQL Server / Výukový program T-SQL, část 37

  3. Začínáme s Oracle SQL Developer na MacOSX

  4. SQLite MAX