PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Мога ли да напиша PostgreSQL функции на Ruby on Rails?

Тази част от въпроса ви:

Знам, че можем да го създадем ръчно в PostgreSQL, но „магията“ с Active Record е, че базата данни може да бъде пресъздадена с всички модели.

ми казва, че наистина търсите начин да интегрирате PostgreSQL функции с нормалния процес на миграция на Rails и Rake задачи като db:schema:load .

Добавянето и премахването на функции в миграцията е лесно:

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

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

Трябва да използвате отделен up и down методи вместо единична change метод, защото ActiveRecord няма да има представа как да приложи, да не говорим за обръщане на създаване на функция. И вие използвате connection.execute за да подадете необработената дефиниция на функцията към PostgreSQL. Можете също да направите това с reversible вътре в 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

но намирам, че това е по-шумно от up и down .

Въпреки това, schema.rb и обичайните Rake задачи, които работят с schema.rb (като db:schema:load и db:schema:dump ) няма да знае какво да прави с функциите на PostgreSQL и други неща, които ActiveRecord не разбира. Все пак има начин да заобиколите това, можете да изберете да използвате structure.sql файл вместо schema.rb чрез настройка:

config.active_record.schema_format = :sql

във вашия config/application.rb файл. След това db:migrate ще напише db/structure.sql файл (който е просто необработен SQL дъмп на вашата PostgreSQL база данни без вашите данни) вместо db/schema.rb . Също така ще използвате различни задачи на Rake за работа с structure.sql :

  • db:structure:dump вместо db:schema:dump
  • db:structure:load вместо db:schema:load

Всичко останало трябва да работи по същия начин.

Този подход също така ви позволява да използвате други неща във вашата база данни, които ActiveRecord няма да разбере:ПРОВЕРЯТЕ ограничения, тригери, непростомислещи колони по подразбиране, ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails:FATAL - Удостоверяването на партньора не бе успешно за потребител (PG::Error)

  2. Как да се справя с отварянето/затварянето на Db връзка в Go приложение?

  3. PostgreSQL наследяване с JPA, хибернация

  4. Относно pglogical производителност

  5. PostgreSQL заявка за географска ширина и дължина