Skip to content

[Bug]: ERROR: invalid input syntax for type integer: "OR_SEGMENT_OPERATOR" (SQLSTATE 22P02) #4230

@bcariaga

Description

@bcariaga

Bug Description

Hi! Im' triying to use Flipt with helm and on premise Postgres database.
The service works fine, but when try to modify any entity (like segments or flags) i get these errors:

In flag type variant:

ERROR: invalid input syntax for type integer: "OR_SEGMENT_OPERATOR" (SQLSTATE 22P02)

Image

In Contraint for Sements:

ERROR: invalid input syntax for type integer: "STRING_COMPARISON_TYPE" (SQLSTATE 22P02)

Image

This is my config:

config:
    meta:
      telemetry_enabled: false
    db:
      prepared_statements_enabled: false
      url: "postgres: <<url from env>> ?sslmode=disable&search_path=<<custom schema>>"
    log:
      level: INFO
      encoding: console
      grpc_level: ERROR

    server:
      protocol: http
      host: 0.0.0.0
      https_port: 443
      http_port: 8080
      grpc_port: 9000

I'm using lasted version (1.58.1)

Thanks for any advance!

Which major version?

v1

Version Info

Version: v1.58.1
Commit: 6834620
Build Date: 2025-05-08T13:52:30Z
Go Version: go1.24.3
OS/Arch: linux/amd64

Search

  • I searched for other open and closed issues before opening this

Steps to Reproduce

  1. Create a new container with helm (this image: docker.flipt.io/flipt/flipt)
  2. Configure any Postgres DB instance
  3. Use this config (replace the <>):
config:
    meta:
      telemetry_enabled: false
    db:
      prepared_statements_enabled: false
      url: "postgres: <<url from env>> ?sslmode=disable&search_path=<<custom schema>>"
    log:
      level: INFO
      encoding: console
      grpc_level: ERROR

    server:
      protocol: http
      host: 0.0.0.0
      https_port: 443
      http_port: 8080
      grpc_port: 9000
  1. Create a Segment (or Flag)
  2. Try edit a Create Entity

Expected Behavior

Can modify any entity without errors

Additional Context

This is the Helm config I'm using:

flip-values.yml

replicaCount: 2
minReadySeconds: 0

image:
  repository: docker.flipt.io/flipt/flipt
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  tag: ""

imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""

serviceAccount:
  # Specifies whether a service account should be created
  create: true
  # Annotations to add to the service account
  annotations: {}
  # The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template
  name: ""

test:
  # Can pin the version of busybox to a specific version
  # tag: '1.36.1'

podAnnotations: {}
podLabels: {}

deploymentAnnotations: {}
deploymentLabels: {}

podSecurityContext:
  runAsUser: 100
  runAsGroup: 1000
  fsGroup: 1000

securityContext:
  allowPrivilegeEscalation: false
  capabilities:
    drop:
      - ALL
  privileged: false
  readOnlyRootFilesystem: true
  runAsNonRoot: true
  runAsUser: 100
  seccompProfile:
    type: "RuntimeDefault"

readinessProbe:
  httpGet:
    path: /health
    port: http
  initialDelaySeconds: 3

livenessProbe:
  httpGet:
    path: /health
    port: http
  initialDelaySeconds: 3

## Expose the flipt service to be accessed from outside the cluster (LoadBalancer service).
## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
## ref: http://kubernetes.io/docs/user-guide/services/
##
service:
  enabled: true
  type: ClusterIP
  httpPort: 8080
  httpsPort: 443
  grpcPort: 9000
  ## Service annotations. Can be templated.
  annotations: {}
  labels: {}

ingress:
  enabled: false
  className: ""
  annotations:
    {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: flipt.local
      paths:
        - path: /
          pathType: ImplementationSpecific
          # backend configuration is optional
          # if not specified, defaults to:
          # backend:
          #   servicePort: http
          #   serviceName: <chart-fullname>
          backend:
            servicePort: http
            serviceName: ""
  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local

resources:
  {}
  # limits:
  #   cpu: 100m
  #   memory: 128Mi
  # requests:
  #   cpu: 100m
  #   memory: 128Mi

autoscaling:
  enabled: false
  minReplicas: 1
  maxReplicas: 100
  targetCPUUtilizationPercentage: 80
  # targetMemoryUtilizationPercentage: 80

pdb:
  enabled: true
  maxUnavailable: 1

nodeSelector: {}
tolerations: []
affinity: {}
strategy: {}
topologySpreadConstraints: []

## Container ports
##
containerPorts:
  ## http is the Flipt HTTP container port
  http: 8080
  ## https is the Flipt HTTPS container port
  https: 443
  ## grpc Flipt GRPC container port
  grpc: 9000

## Persistence Parameters
## ref: https://kubernetes.io/docs/user-guide/persistent-volumes/
##
persistence:
  ## enabled enables persistence using Persistent Volume Claims
  enabled: false
  ## annotations are additional custom annotations for the PVC
  annotations: {}
  ## existingClaim sets the name of an existing PVC to use for persistence
  existingClaim: ""
  ## subPath is the name of a volume's sub path to mount for persistence
  subPath: ""
  ## accessModes [array] Persistent Volume access modes
  accessModes:
    - ReadWriteOnce
  ## storageClass sets Persistent Volume storage class
  ## If defined, storageClassName: <storageClass>
  ## If set to "-", storageClassName: "", which disables dynamic provisioning
  ## If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner
  ##
  storageClass: ""
  ## size is the Persistent Volume size
  size: 5Gi

flipt:
  # httpPort is the Flipt HTTP container port
  # @deprecated use containerPorts.http instead
  httpPort: 8080
  # grpcPort is the Flipt GRPC container port
  # @deprecated use containerPorts.grpc instead
  grpcPort: 9000
  args: []
  # extraEnvVars is a list of extra environment variables to set e.g.
  # - name: FLIPT_LOG_LEVEL
  #   value: debug
  extraEnvVars:
    - name: FLIPT_DB_URL
      value: "postgres://$(DATABASE_USER):$(DATABASE_PASSWORD)@$(DATABASE_HOST):$(DATABASE_PORT)/$(DATABASE_NAME)?sslmode=disable&search_path=$(DATABASE_SCHEMA)"
  envFrom:
    - secretRef:
        name: flipt
  config:
    meta:
      telemetry_enabled: false
    db:
      prepared_statements_enabled: false
      url: "postgres://$(DATABASE_USER):$(DATABASE_PASSWORD)@$(DATABASE_HOST):$(DATABASE_PORT)/$(DATABASE_NAME)?sslmode=disable&search_path=$(DATABASE_SCHEMA)"
    log:
      level: INFO
      encoding: console
      grpc_level: ERROR

    server:
      protocol: http
      host: 0.0.0.0
      https_port: 443
      http_port: 8080
      grpc_port: 9000

migration:
  # If enabled will run the migration script over your db before rolling out
  # a new deployment. This will run in a helm hook so will get cleaned up on
  # success.
  enabled: false
  # How long to let the job run for kube will terminate it.
  deadLine: 600 # sec

metrics:
  serviceMonitor:
    # -- If enabled, ServiceMonitor resources for Prometheus Operator are created
    enabled: true
    # -- Port where to scrape metrics from
    port: http
    # -- Namespace selector for ServiceMonitor resources
    namespaceSelector: {}
    # -- ServiceMonitor annotations
    annotations: {}
    # -- Additional ServiceMonitor labels
    labels: {}
    # -- ServiceMonitor scrape interval
    # Default is 15s because included recording rules use a 1m rate, and scrape interval needs to be at
    # least 1/4 rate interval.
    interval: 15s
    # -- ServiceMonitor scrape timeout in Go duration format (e.g. 15s)
    scrapeTimeout: null
    # -- ServiceMonitor relabel configs to apply to samples before scraping
    # https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#relabelconfig
    relabelings: []
    # -- What to do when flipt metrics labels are conflicting with Prometheus server-side labels.
    # true means keep label values from flipt.
    honorLabels: false
    # -- ServiceMonitor will use http by default, but you can pick https as well
    scheme: http
    # -- ServiceMonitor will use these tlsConfig settings to make the health check requests
    tlsConfig: null

# extraVolumeMounts is a list of extra volumes to mount to the flipt container
# - name: flipt-git-ssh-key
#   mountPath: /etc/flipt/ssh.key
#   subPath: ssh.key
extraVolumeMounts: []

# extraVolumes is a list of extra volumes to mount to the pod
# - name: flipt-git-ssh-key
#   secret:
#     secretName: flit-git-ssh-key-secret
extraVolumes: []

# ssh contains some SSH specific configuration parameters
ssh:
  # knownHosts is the contents of a custom known hosts file
  # for use with SSH authentication and the Git backend for Flipt
  knownHosts: ""

## @param extraDeploy Array of extra objects to deploy with the release
##
extraDeploy: []


Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions