복붙노트

[RUBY-ON-RAILS] 나는 레일에 루비에 PostgreSQL의 함수를 작성할 수 있습니까?

RUBY-ON-RAILS

나는 레일에 루비에 PostgreSQL의 함수를 작성할 수 있습니까?

우리는 루비 온 레일즈를 기반으로 프로젝트를 시작하고있다. 우리는 펄과 PostgreSQL 기능을 가진 사업에 사용하고, 우리의 PostgreSQL에서 함수를 작성하고 액티브 레코드와 모델 기록을 유지 해야하는 방법 레일 및 액티브 레코드 I로 보지했습니다.

나는 우리가 PostgreSQL을에 수동으로 만들 수 있습니다 알고 있지만, 액티브 레코드와 "마법"데이터베이스가 모든 모델에 재현 될 수 있다는 것이다.

레일을 사용하여 PostgreSQL의 기능을 생성하고 모델에 보관하는 방법은 없나요?

해결법

  1. ==============================

    1.귀하의 질문에이 부분 :

    귀하의 질문에이 부분 :

    스키마 : 부하를 정말 같은 DB와 같은 일반 레일 마이그레이션 프로세스와 레이크 작업을 PostgreSQL의 기능을 통합하는 방법을 찾고 있다는 것을 알려줍니다.

    추가 및 마이그레이션에서 기능을 제거하는 것은 간단합니다 :

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

    당신은 어떻게 커녕 적용 함수의 생성을 반대하는 액티브 아무 생각이 없기 때문에 별도의 최대 대신 하나의 변화 방법의 방법 아래를 사용해야합니다. 그리고 당신은 PostgreSQL을에 원시 함수 정의를 공급하는 connection.execute 사용합니다. 또한 가역 내부의 변화와 함께이 작업을 수행 할 수 있습니다

    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
    

    그러나 나는 위아래에 비해 그 아수라장을 찾을 수 있습니다.

    그러나 schema.rb 및 일반 레이크 작업이 schema.rb와 작업 (예 : dB로 : 스키마 : 부하 및 DB : 스키마 덤프) PostgreSQL의 기능과 액티브 이해하지 않는 다른 것들로 무엇을 알 수 없습니다 . 이 비록 주위에 방법, 당신은 설정에 의해 대신 schema.rb의 structure.sql 파일을 사용하도록 선택할 수는있다 :

    config.active_record.schema_format = :sql
    

    당신의 설정 / application.rb 파일입니다. 그 후, DB : 마이그레이션 대신 dB / schema.rb의 (데이터없이 PostgreSQL 데이터베이스의 단지 원시 SQL 덤프입니다) DB를 / structure.sql 파일을 작성합니다. 또한 structure.sql 작업을위한 다른 레이크 작업을 사용합니다 :

    나머지는 전부 동일하게 작동합니다.

    이러한 접근 방식은 또한 다른 액티브 이해되지 않습니다 데이터베이스에있는 것들을 사용할 수 있습니다 : CHECK 제약 조건, 트리거, 단순하지 않은 마음을 열 기본값을 ...

  2. ==============================

    2.유일한 요구 사항은 당신의 레일 응용 프로그램 어딘가에을 만드는 경우, 이것은 당신이 원시 SQL 쿼리를 실행하는 데 사용할 수있는 액티브 :: Base.connection.execute를 통해 가능하다.

    유일한 요구 사항은 당신의 레일 응용 프로그램 어딘가에을 만드는 경우, 이것은 당신이 원시 SQL 쿼리를 실행하는 데 사용할 수있는 액티브 :: Base.connection.execute를 통해 가능하다.

    stmt = 'CREATE FUNCTION...'
    ActiveRecord::Base.connection.execute stmt
    

    잘 (나는 당신이 처리 할 수있는 모델의 방법이있을 것이다 상상하는 것)로 그 다음 액티브 :: Base.connection.execute를 사용하여 함수를 호출한다.

  3. from https://stackoverflow.com/questions/31953498/can-i-write-postgresql-functions-on-ruby-on-rails by cc-by-sa and MIT license