# Conventions

Following a set of database conventions improves the readability and understanding of the database and related SQL. Every DBA has their own thoughts about which convention to follow. This is ours, tailored for PostgreSQL.

> **Note**: While we typically recommend **PascalCase** naming for Linx development (e.g., `UpdateCustomer`), this convention does not translate cleanly to PostgreSQL due to how it handles case sensitivity.\
> PostgreSQL folds unquoted identifiers to lowercase, which means using mixed or PascalCase requires quoting object names—leading to potentially cumbersome SQL and inconsistent tooling support.\
> Therefore, we encourage **snake\_case** naming in PostgreSQL for practical and technical consistency.

## Naming

* Names must clearly describe the object.
* Use `snake_case` for all object names in PostgreSQL.
* Avoid Hungarian notation (e.g., `int_number`).
* Avoid abbreviations unless they are widely recognized.

| Applies To        | Convention       | Example           |
| ----------------- | ---------------- | ----------------- |
| Tables            | `noun`, singular | `customer`        |
| Stored Procedures | `verb_noun`      | `update_customer` |
| Views             | `noun`           | `customer_orders` |
| Fields            | `noun`           | `surname`         |

> You **can** use PascalCase object names in PostgreSQL **if** you **quote** them consistently in every SQL statement (e.g., `"Customer"`).\
> However, this is discouraged as it leads to more verbose and error-prone SQL.

## SQL Queries

* Use consistent indentation.
* Use **UPPERCASE** for SQL keywords: `SELECT`, `FROM`, `WHERE`, `JOIN`, etc.
* Use meaningful aliases—avoid single-letter or cryptic abbreviations.
* Use **single quotes** (`'string'`) for string literals.
* Use **double quotes** (`"identifier"`) only when necessary to refer to case-sensitive or reserved identifiers.

## Links

* [SQL Formatter by SQLFormat.org (PostgreSQL Compatible)](https://sqlformat.org/)
* [pgFormatter - PostgreSQL SQL Syntax Beautifier](https://sqlformat.darold.net/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.linx.software/reference/plugins/postgresql/conventions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
