ankane/pgsync · error · Error

Single column primary key required for this data rule: #{rul

Error message

Single column primary key required for this data rule: #{rule}

What it means

Error "Single column primary key required for this data rule: #{rule}" thrown in ankane/pgsync.

Source

Thrown at lib/pgsync/task.rb:279

          "NOW() - (RANDOM() * 100000000)::int * INTERVAL '1 second'"
        when "random_ip"
          # casting double to int rounds
          "(1 + RANDOM() * 254)::int::text || '.0.0.1'"
        when "random_letter"
          # casting double to int rounds
          "chr(65 + (RANDOM() * 25)::int)"
        when "random_string"
          "RIGHT(MD5(RANDOM()::text), 10)"
        when "null", nil
          "NULL"
        else
          raise Error, "Unknown rule #{rule} for column #{column}"
        end
      end
    end

    def quoted_primary_key(table, primary_key, rule)
      raise Error, "Single column primary key required for this data rule: #{rule}" unless primary_key.size == 1
      "#{quoted_table}.#{quote_ident(primary_key.first)}"
    end

    def maybe_disable_triggers
      if opts[:disable_integrity] || opts[:disable_integrity_v2] || opts[:disable_user_triggers]
        destination.transaction do
          triggers = destination.triggers(table)
          triggers.select! { |t| t["enabled"] == "t" }
          internal_triggers, user_triggers = triggers.partition { |t| t["internal"] == "t" }
          integrity_triggers = internal_triggers.select { |t| t["integrity"] == "t" }
          restore_triggers = []

          # both --disable-integrity options require superuser privileges
          # however, only v2 works on Amazon RDS, which added specific support for it
          # https://aws.amazon.com/about-aws/whats-new/2014/11/10/amazon-rds-postgresql-read-replicas/
          #
          # session_replication_role disables more than foreign keys (like triggers and rules)
          # this is probably fine, but keep the current default for now

View on GitHub (pinned to 57bdddf5db)

When it happens

Trigger: Thrown at lib/pgsync/task.rb:279 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of ankane/pgsync@57bdddf5db (2026-08-23). Data as JSON: /api/errors/714613ddbb6ed0d6. Report an issue: GitHub.