PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Czy mogę pisać funkcje PostgreSQL w Ruby on Rails?

Ta część twojego pytania:

Wiem, że możemy stworzyć ją ręcznie w PostgreSQL, ale „magia” Active Record polega na tym, że bazę danych można odtworzyć ze wszystkimi modelami.

mówi mi, że naprawdę szukasz sposobu na zintegrowanie funkcji PostgreSQL z normalnym procesem migracji Rails i zadaniami Rake, takimi jak db:schema:load .

Dodawanie i usuwanie funkcji w migracjach jest łatwe:

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

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

Musisz użyć oddzielnego up i down metody zamiast pojedynczej change metody, ponieważ ActiveRecord nie będzie miał pojęcia, jak zastosować, nie mówiąc już o odwróceniu tworzenia funkcji. I używasz connection.execute aby przesłać surową definicję funkcji do PostgreSQL. Możesz to również zrobić za pomocą reversible wewnątrz 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 uważam, że jest to głośniejsze niż up i down .

Jednak schema.rb i zwykłe zadania rake, które działają z schema.rb (np. db:schema:load i db:schema:dump ) nie będzie wiedział, co zrobić z funkcjami PostgreSQL i innymi rzeczami, których ActiveRecord nie rozumie. Istnieje jednak sposób na obejście tego, możesz użyć structure.sql plik zamiast schema.rb przez ustawienie:

config.active_record.schema_format = :sql

w swoim config/application.rb plik. Następnie db:migrate napisze db/structure.sql plik (który jest po prostu surowym zrzutem bazy danych PostgreSQL bez Twoich danych) zamiast db/schema.rb . Będziesz także używać różnych zadań Rake do pracy z structure.sql :

  • db:structure:dump zamiast db:schema:dump
  • db:structure:load zamiast db:schema:load

Wszystko inne powinno działać tak samo.

Takie podejście pozwala również na użycie innych rzeczy w Twojej bazie danych, których ActiveRecord nie zrozumie:ograniczeń CHECK, wyzwalaczy, nieprostych wartości domyślnych kolumn, ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Skalowanie PostgreSQL za pomocą puli połączeń i równoważenia obciążenia

  2. Postgres nie mógł połączyć się z serwerem

  3. PostgreSQL zyskuje na popularności:wyniki z Postgres 2018 i trendy 2019

  4. Zmienne zdefiniowane przez użytkownika w PostgreSQL

  5. Konwertuj tablicę PostgreSQL na tablicę PHP