Code zum Verbinden von Rails 3 mit PostgreSQL 10

Ich musste eine Verbindung zu PostgreSQL 10 herstellen und es mit Rails 3.0.1 testen, also entschied ich mich, einen Initialisierer hinzuzufügen.

config/initializers/backport_pg_10_support_to_rails_3.rb

if Rails.env.test?
  module ActiveRecord
    class Base
      class << self
        def establish_connection(*arg)
        end
      end
    end
  end
  require 'active_record/connection_adapters/postgresql_adapter'
  module ActiveRecord
    module ConnectionAdapters
      class PostgreSQLAdapter < AbstractAdapter
        # Resets the sequence of a table's primary key to the maximum value.
        def reset_pk_sequence!(table, pk = nil, sequence = nil)
          unless pk and sequence
            default_pk, default_sequence = pk_and_sequence_for(table)
            pk ||= default_pk
            sequence ||= default_sequence
          end
          if pk
            if sequence
              quoted_sequence = quote_column_name(sequence)
              if ActiveRecord::Base.connection.select_value('SELECT version()').include?('PostgreSQL 10')
                # language=sql
                sql =<<-EOS
                  SELECT setval('#{quoted_sequence}', (SELECT GREATEST(MAX(#{quote_column_name pk})+(SELECT seqincrement FROM pg_sequence WHERE seqrelid = '#{quoted_sequence}'::regclass), (SELECT seqmin FROM pg_sequence WHERE seqrelid = '#{quoted_sequence}'::regclass)) FROM #{quote_table_name(table)}), false)
                EOS
              else
                # language=sql
                sql =<<-EOS
                  SELECT setval('#{quoted_sequence}', (SELECT GREATEST(MAX(#{quote_column_name pk})+(SELECT increment_by FROM #{quoted_sequence}), (SELECT min_value FROM #{quoted_sequence})) FROM #{quote_table_name(table)}), false)
                EOS
              end
            else
              @logger.warn "#{table} has primary key #{pk} with no default sequence" if @logger
            end
          end
        end
      end
    end
  end
end

Ich habe require'active_record / connection_adapters / postgresql_adapter' gesetzt und def reset_pk_sequence! (Tabelle, pk = nil, sequence = nil) überschrieben, aber das allein gibt einen Fehler, dass setup_connection nicht existiert. Ich habe "etabl_connection" vor "require" geschrieben.

reset_pk_sequence! ist im Grunde eine Kopie von https://github.com/rails/rails/blob/3-0-stable/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, und der geänderte Teil ist der SQL-Erstellungsteil. ist.

Recommended Posts

Code zum Verbinden von Rails 3 mit PostgreSQL 10
Ich habe versucht, die verwendeten Methoden zusammenzufassen
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich habe versucht, die Sitzung in Rails zu organisieren
[Java / PostgreSQL] Verbinden Sie die WEB-Anwendung mit der Datenbank
Eine Überprüfung des von Rails-Anfängern verwendeten Codes
[Rails] Ich weiß nicht, wie ich das Modell verwenden soll ...
Stellen Sie eine Verbindung von Java zu PostgreSQL her
[Rails] [Bootstrap] Ich möchte die Schriftgröße entsprechend ändern
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
Senden Sie den verwendeten Gutscheincode an den angegebenen Endpunkt zurück
Wechseln Sie dynamisch die Datenbank, zu der eine Verbindung hergestellt werden soll
Ich habe versucht, die Methode zu erklären
[Rails] Ich habe versucht, die Anwendung zu löschen
Stellen Sie mit dem iPhone eine Verbindung zum Rails-Server her
Rails DB PostgreSQL wurde in MySQL geändert
Daten sortieren Absteigend, aufsteigend / Schienen
Ich habe versucht, die Bildvorschau mit Rails / jQuery zu implementieren
Ich habe versucht zu verstehen, wie die Rails-Methode "redirect_to" definiert ist
Ich habe versucht zu verstehen, wie die Rails-Methode "link_to" definiert ist
Ich habe das Mediator-Muster verwendet, um ein Flussüberquerungs-Puzzle auszudrücken.
[Rails] Ich habe etwas über Migrationsdateien gelernt! (Hinzufügen einer Spalte zur Tabelle)
Ich habe versucht, Processing auf VS Code zu migrieren
[Rails] Ich war süchtig nach den Nginx-Einstellungen, als ich Action Cable verwendete.
[Schienen] Verwendung der Kartenmethode
Ich wollte der Methode @VisibleForTesting hinzufügen
Ich habe Docker verwendet, um die Vorlage zu verfestigen, die mit Spring Boot entwickelt werden soll.
Ich war süchtig nach der Rollmethode
Ich habe versucht, das Iterator-Muster zu implementieren
[Circle CI] Ich war süchtig nach dem automatischen Test von Circle CI (Rails + MySQL) [Memo]
Ich war süchtig nach dem Spring-Batch-Test
Ich habe versucht, die Stream-API zusammenzufassen
Ich ging zum Java Women's Club # 1
Ich möchte ein Komitee mit Rails vorstellen, ohne zu schmutzig zu werden
[Rails] So wenden Sie das in der Hauptanwendung verwendete CSS mit Administrate an
Warum war das Lesen des Codes schmerzhaft?
[Rails6] So verbinden Sie die von Scaffold generierte Buchungsfunktion mit der von devise generierten Benutzerfunktion
03. Ich habe eine Anfrage von Spring Boot an die Postleitzahlensuch-API gesendet
[Rails / ActiveRecord] Ich möchte den Wert überprüfen, bevor der Typ konvertiert wird (_before_type_cast).
Ich habe es verwendet, ohne die O / R-Zuordnung der Schienen zu kennen, also habe ich es überprüft.
Ich war süchtig danach, vom Docker-Container aus keine Verbindung zu AWS-S3 herstellen zu können
[Rails] So bedienen Sie die in der Hauptanwendung verwendete Hilfsmethode mit Administrate
[Rails] So bestimmen Sie das Ziel anhand von "Rails-Routen"
Schaltfläche [Schienen], um zum Anfang der Seite zurückzukehren
[Rails] Wenn ich form_with benutze, friert der Bildschirm ein! ??
Memorandum zum Bereinigen des Codes Ruby
Der Weg zur Japanisierung von Rails führt zu Fehlermeldungen
[Rails] Rails neu, um eine Datenbank mit PostgreSQL zu erstellen
Ich möchte den Inhalt der Absicht var_dump
[Ruby] Code zur Anzeige des Tages
[API] Ich habe versucht, die Postleitzahlensuch-API zu verwenden