↑↓ select↵ open⌫ change scopeOpen full search

PG.CENTER connects PostgreSQL documentation, reference, and ecosystem knowledge. Maintained by Pigsty.

Wiki / SQLSTATE

F0000 — config_file_error

F0000 is the configuration-file error condition, but its severity and recovery boundary depend on the owner. Fixed core paths include a recovery-target failure and OAuth HBA validation; the unaccent contrib dictionary has its own file-open and rule-parser paths.

English manual coverage begins with PostgreSQL 8.1. Source history and runtime observations have their own recorded version boundaries.

Reading PG 18·Select a recorded version

aliases
Unknown
class name
Configuration File Error
condition name
config_file_error
lang
en
sqlstate
F0000

Definition PG 18

F0000

At a glance {#at-a-glance}

F0000 is the configuration-file error condition, but its severity and recovery boundary depend on the owner. Fixed core paths include a recovery-target failure and OAuth HBA validation; the unaccent contrib dictionary has its own file-open and rule-parser paths.

Meaning {#meaning}

The recovery path emits FATAL when archive recovery ends before a configured target is reached. OAuth validation calls ereport(elevel): HBA parsing supplies the level, load_hba() logs parse errors while retaining the old rules on reload, and initial postmaster startup turns a failed HBA load into a separate FATAL that prevents startup. The unaccent loader reports an ERROR when it cannot open its rules file, while duplicate rules and malformed rule lines are WARNING conditions with this SQLSTATE.

These are configuration-owner-specific paths. A line number and file context belong to HBA parsing; %m belongs to the dictionary file-open operation; a recovery-target message has neither of those fields.

Messages {#messages}

  • FATAL, SQLSTATE F0000: recovery ended before configured recovery target was reached.
  • elevel selected by HBA loading, with SQLSTATE F0000: oauth_validator_libraries must be set for authentication method %s; context line %d of configuration file "%s".
  • elevel selected by HBA loading: invalid list syntax in parameter "%s".
  • elevel selected by HBA loading: authentication method "oauth" requires argument "validator" to be set when oauth_validator_libraries contains multiple options; context line %d of configuration file "%s".
  • ERROR, SQLSTATE F0000: could not open unaccent file "%s": %m.
  • WARNING, SQLSTATE F0000: duplicate source strings, first one will be used.
  • WARNING, SQLSTATE F0000: invalid syntax: more than two strings in unaccent rule or invalid syntax: unfinished quoted string in unaccent rule.

The OAuth templates use ereport(elevel), so the source function alone does not turn every HBA event into ERROR or FATAL; the startup/reload caller determines the operational boundary.

Diagnosis {#diagnosis}

Keep the complete primary, detail, hint, context, file name, line number, subsystem, and phase. For recovery, inspect the configured target and available WAL/archive. For OAuth, inspect the HBA line and oauth_validator_libraries value; distinguish an empty list from list syntax and from a missing validator argument. For unaccent, check the resolved rules path, permissions, encoding, and rule format; a warning can leave the dictionary loaded with a first-rule-wins or skipped-line behavior.

Response {#response}

Fix the named configuration using its owning format and keep a known-good copy. A recovery-target FATAL or initial HBA-load FATAL ends startup, so there is no client transaction to roll back; correct the target/configuration and restart, then use a new connection. An HBA reload parse failure is logged and the old rules remain active, so repair the file and reload again rather than assuming the new rules took effect. An unaccent ERROR inside an explicit client transaction requires ROLLBACK or an existing savepoint before continuing; warning paths do not require rollback, but their skipped or duplicate rules should be reviewed before relying on the dictionary.

Versions {#versions}

The locked catalogue records this condition from 7.4; fixed source coverage is PostgreSQL 18.6. No startup, reload, or dictionary failure was induced for this source-only page.

Related {#related}

58P01, F0001, 57P03

Sources {#sources}

src/backend/access/transam/xlogrecovery.c#L1921-L1931

src/backend/libpq/auth-oauth.c#L813-L870

src/backend/libpq/hba.c#L2635-L2692

src/backend/postmaster/postmaster.c#L1327-L1338

contrib/unaccent/unaccent.c#L65-L109

contrib/unaccent/unaccent.c#L260-L271

The structured evidence record records the fixed message groups, caller-selected severity, and source/runtime boundary.

Compare versions

SQLSTATE evidence and recorded runtime versions

claims · identity
{
  "claim_id": "identity",
  "limits": "",
  "method": "Read locked definition snapshot.",
  "position": 0,
  "runtime": [],
  "sources": [
    "src.errcodes.18.6"
  ],
  "statement": "F0000 is config_file_error in SQLSTATE Class F0."
}
claims · resolved-paths
{
  "claim_id": "resolved-paths",
  "limits": "Source confirmation is not natural runtime.",
  "method": "Read complete source contexts and startup/reload guards.",
  "position": 1,
  "runtime": [],
  "sources": [
    "src.path.0",
    "src.path.1",
    "src.path.2",
    "src.path.3",
    "src.path.4"
  ],
  "statement": "F0000 has distinct recovery FATAL, caller-selected OAuth HBA, unaccent ERROR, and unaccent WARNING paths; HBA reload keeps old rules while initial startup fails closed."
}
claims · history
{
  "claim_id": "history",
  "limits": "",
  "method": "Use locked catalogue boundary.",
  "position": 2,
  "runtime": [],
  "sources": [
    "src.errcodes.18.6"
  ],
  "statement": "The locked catalogue records F0000 from 7.4; it does not prove the exact introduction rationale."
}
messages · message.0
{
  "limits": "",
  "message_id": "message.0",
  "path": "",
  "position": 0,
  "raw": {
    "id": "message.0",
    "primary_template": "recovery ended before configured recovery target was reached",
    "severity_source": "FATAL",
    "sources": [
      "src.path.0"
    ],
    "sqlstate": "F0000"
  },
  "severity": "FATAL",
  "sources": [
    "src.path.0"
  ],
  "templates": [
    {
      "kind": "primary",
      "literal": "recovery ended before configured recovery target was reached",
      "position": 0,
      "role": "",
      "template": "recovery ended before configured recovery target was reached"
    }
  ]
}
messages · message.1
{
  "limits": "",
  "message_id": "message.1",
  "path": "",
  "position": 1,
  "raw": {
    "context_template": "line %d of configuration file \"%s\"",
    "id": "message.1",
    "primary_template": "oauth_validator_libraries must be set for authentication method %s",
    "severity_source": "caller-selected elevel",
    "sources": [
      "src.path.1"
    ],
    "sqlstate": "F0000"
  },
  "severity": "caller-selected elevel",
  "sources": [
    "src.path.1"
  ],
  "templates": [
    {
      "kind": "primary",
      "literal": "oauth_validator_libraries must be set for authentication method",
      "position": 0,
      "role": "",
      "template": "oauth_validator_libraries must be set for authentication method %s"
    },
    {
      "kind": "context",
      "literal": "line of configuration file \" \"",
      "position": 1,
      "role": "",
      "template": "line %d of configuration file \"%s\""
    }
  ]
}
messages · message.2
{
  "limits": "",
  "message_id": "message.2",
  "path": "",
  "position": 2,
  "raw": {
    "id": "message.2",
    "primary_template": "invalid list syntax in parameter \"%s\"",
    "severity_source": "caller-selected elevel",
    "sources": [
      "src.path.1"
    ],
    "sqlstate": "F0000"
  },
  "severity": "caller-selected elevel",
  "sources": [
    "src.path.1"
  ],
  "templates": [
    {
      "kind": "primary",
      "literal": "invalid list syntax in parameter \" \"",
      "position": 0,
      "role": "",
      "template": "invalid list syntax in parameter \"%s\""
    }
  ]
}
messages · message.3
{
  "limits": "",
  "message_id": "message.3",
  "path": "",
  "position": 3,
  "raw": {
    "context_template": "line %d of configuration file \"%s\"",
    "id": "message.3",
    "primary_template": "authentication method \"oauth\" requires argument \"validator\" to be set when oauth_validator_libraries contains multiple options",
    "severity_source": "caller-selected elevel",
    "sources": [
      "src.path.1"
    ],
    "sqlstate": "F0000"
  },
  "severity": "caller-selected elevel",
  "sources": [
    "src.path.1"
  ],
  "templates": [
    {
      "kind": "primary",
      "literal": "authentication method \"oauth\" requires argument \"validator\" to be set when oauth_validator_libraries contains multiple options",
      "position": 0,
      "role": "",
      "template": "authentication method \"oauth\" requires argument \"validator\" to be set when oauth_validator_libraries contains multiple options"
    },
    {
      "kind": "context",
      "literal": "line of configuration file \" \"",
      "position": 1,
      "role": "",
      "template": "line %d of configuration file \"%s\""
    }
  ]
}
messages · message.4
{
  "limits": "",
  "message_id": "message.4",
  "path": "",
  "position": 4,
  "raw": {
    "id": "message.4",
    "primary_template": "could not open unaccent file \"%s\": %m",
    "severity_source": "ERROR",
    "sources": [
      "src.path.4"
    ],
    "sqlstate": "F0000"
  },
  "severity": "ERROR",
  "sources": [
    "src.path.4"
  ],
  "templates": [
    {
      "kind": "primary",
      "literal": "could not open unaccent file \" \":",
      "position": 0,
      "role": "",
      "template": "could not open unaccent file \"%s\": %m"
    }
  ]
}
messages · message.5
{
  "limits": "",
  "message_id": "message.5",
  "path": "",
  "position": 5,
  "raw": {
    "id": "message.5",
    "primary_template": "duplicate source strings, first one will be used",
    "severity_source": "WARNING",
    "sources": [
      "src.path.4"
    ],
    "sqlstate": "F0000"
  },
  "severity": "WARNING",
  "sources": [
    "src.path.4"
  ],
  "templates": [
    {
      "kind": "primary",
      "literal": "duplicate source strings, first one will be used",
      "position": 0,
      "role": "",
      "template": "duplicate source strings, first one will be used"
    }
  ]
}
messages · message.6
{
  "limits": "",
  "message_id": "message.6",
  "path": "",
  "position": 6,
  "raw": {
    "id": "message.6",
    "primary_template": "invalid syntax: more than two strings in unaccent rule",
    "severity_source": "WARNING",
    "sources": [
      "src.path.4"
    ],
    "sqlstate": "F0000"
  },
  "severity": "WARNING",
  "sources": [
    "src.path.4"
  ],
  "templates": [
    {
      "kind": "primary",
      "literal": "invalid syntax: more than two strings in unaccent rule",
      "position": 0,
      "role": "",
      "template": "invalid syntax: more than two strings in unaccent rule"
    }
  ]
}
messages · message.7
{
  "limits": "",
  "message_id": "message.7",
  "path": "",
  "position": 7,
  "raw": {
    "id": "message.7",
    "primary_template": "invalid syntax: unfinished quoted string in unaccent rule",
    "severity_source": "WARNING",
    "sources": [
      "src.path.4"
    ],
    "sqlstate": "F0000"
  },
  "severity": "WARNING",
  "sources": [
    "src.path.4"
  ],
  "templates": [
    {
      "kind": "primary",
      "literal": "invalid syntax: unfinished quoted string in unaccent rule",
      "position": 0,
      "role": "",
      "template": "invalid syntax: unfinished quoted string in unaccent rule"
    }
  ]
}
sources · src.errcodes.18.6
{
  "commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
  "docs_url": "",
  "kind": "upstream_source",
  "location": "",
  "path": "src/backend/utils/errcodes.txt",
  "position": 0,
  "sha256": "6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba",
  "source_id": "src.errcodes.18.6",
  "tag": "REL_18_6",
  "url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt#L453"
}
sources · src.path.0
{
  "commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
  "docs_url": "",
  "kind": "upstream_source",
  "location": "",
  "path": "src/backend/access/transam/xlogrecovery.c",
  "position": 1,
  "sha256": "5757d413a6bf3b285fa60ddbbe54b2cdaffde1011ffe51220dfacb8fd9754c5d",
  "source_id": "src.path.0",
  "tag": "REL_18_6",
  "url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/access/transam/xlogrecovery.c#L1921"
}
sources · src.path.1
{
  "commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
  "docs_url": "",
  "kind": "upstream_source",
  "location": "",
  "path": "src/backend/libpq/auth-oauth.c",
  "position": 2,
  "sha256": "a62e6d17fc7117be3ce536544216a1fa86c527fdbb0ce15841c4b199c6bb04d5",
  "source_id": "src.path.1",
  "tag": "REL_18_6",
  "url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/libpq/auth-oauth.c#L813"
}
sources · src.path.2
{
  "commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
  "docs_url": "",
  "kind": "upstream_source",
  "location": "",
  "path": "src/backend/libpq/hba.c",
  "position": 3,
  "sha256": "b31049f83ce504979493155e9f496ab26b5f642969acc1d5280c32a86e7d1db3",
  "source_id": "src.path.2",
  "tag": "REL_18_6",
  "url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/libpq/hba.c#L2635"
}
sources · src.path.3
{
  "commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
  "docs_url": "",
  "kind": "upstream_source",
  "location": "",
  "path": "src/backend/postmaster/postmaster.c",
  "position": 4,
  "sha256": "467a6d6deb8f31d1fa599b854511207923a252f02b7d5cbcc878caece577eefb",
  "source_id": "src.path.3",
  "tag": "REL_18_6",
  "url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/postmaster/postmaster.c#L1327"
}
sources · src.path.4
{
  "commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
  "docs_url": "",
  "kind": "upstream_source",
  "location": "",
  "path": "contrib/unaccent/unaccent.c",
  "position": 5,
  "sha256": "4daa6c5972ad9741aa2bb90ceb5e2483738d65bc166b690d41f814dbddb4df9e",
  "source_id": "src.path.4",
  "tag": "REL_18_6",
  "url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/contrib/unaccent/unaccent.c#L65"
}

Source references

Full definition and evidence JSON

Definition sources

center · PostgreSQL 18 · english-manuals:84c80840a8c621903dab868222d18d6e01357cb55333464281ac3ac37e1c2790

Text language: en · english-manuals:84c80840a8c621903dab868222d18d6e01357cb55333464281ac3ac37e1c2790