Por que C# e PostgreSQL são uma dupla poderosa que vale a pena dominar
\n\nNo mundo do desenvolvimento, cada escolha importa. Ao selecionar uma linguagem, um framework e um banco de dados, você está, na prática, construindo os alicerces do seu projeto. Se você chegou até aqui, é porque tem interesse em uma das combinações mais modernas e robustas para desenvolvimento enterprise: C# e PostgreSQL.
\n\nPor que essa dupla? O C# é uma linguagem madura, fortemente tipada, com um ecossistema gigante e desempenho excepcional. O PostgreSQL é um SGBD objeto-relacional que supera muitos concorrentes em recursos, estabilidade e suporte a tipos de dados complexos (como JSONB, arrays e busca em texto completo). Juntos, eles oferecem muito mais do que "um banco e uma linguagem": são uma ferramenta flexível e escalável para criar aplicações web, microsserviços e sistemas analíticos.
\n\nNeste guia, não vamos apenas passar pela teoria. Vamos mergulhar de cabeça na prática: desde a instalação do driver até a escrita de transações complexas. Você aprenderá a configurar a conexão corretamente, executar operações CRUD, usar ORMs modernos (Entity Framework Core e Dapper) e evitar as armadilhas mais comuns. Vamos nessa!
\n\nPasso 1. Preparação: o que você precisa instalar
\nAntes de escrever código, vamos garantir que você tenha tudo o que precisa.
\n- \n
- PostgreSQL — baixe a versão mais recente do site oficial. Durante a instalação, anote a porta (padrão 5432) e a senha do superusuário
postgres. \n - Visual Studio / Rider / VS Code — qualquer IDE que suporte .NET. \n
- .NET SDK (6.0, 7.0 ou 8.0) — quanto mais novo, melhor. Usaremos o .NET 8. \n
Agora crie um novo projeto. Para um aplicativo de console, é simples:
\ndotnet new console -n CsharpPostgresDemo\ncd CsharpPostgresDemo\n\nO mais importante é instalar o provedor para PostgreSQL. No mundo .NET, isso é o pacote Npgsql (pronuncia-se "En-Pi-Es-Ql"). Ele é a base para todas as outras bibliotecas.
\ndotnet add package Npgsql\n\nPasso 2. Primeira conexão: testando a comunicação
\nVamos criar um script simples que se conecta ao banco e exibe a versão do servidor. Esta é a melhor forma de garantir que tudo está funcionando.
\n\nusing Npgsql;\n\n// String de conexão: insira seus dados\nstring connectionString = "Host=localhost;Port=5432;Database=postgres;Username=postgres;Password=sua_senha";\n\nusing var connection = new NpgsqlConnection(connectionString);\nconnection.Open();\n\n// Executa a consulta\nusing var command = new NpgsqlCommand("SELECT version();", connection);\nstring version = (string)await command.ExecuteScalarAsync();\n\nConsole.WriteLine($"Conexão bem-sucedida! Versão do PostgreSQL: {version}");\n\nExecute o código. Se você vir algo como "PostgreSQL 16.1 on x86_64-pc-linux-gnu..." no console, conseguiu! Caso contrário, verifique a senha, o nome do host e certifique-se de que o serviço PostgreSQL está em execução.
\n\nPasso 3. Operações CRUD em C# com PostgreSQL
\nAgora que a conexão está funcionando, vamos criar uma tabela e executar o ciclo completo: Create, Read, Update, Delete.
\n\nCriando a tabela
\nstring createTableSql = @"\n CREATE TABLE IF NOT EXISTS usuarios (\n id SERIAL PRIMARY KEY,\n nome VARCHAR(100) NOT NULL,\n email VARCHAR(255) UNIQUE NOT NULL,\n criado_em TIMESTAMP DEFAULT NOW()\n );";\n\nusing var cmdCreate = new NpgsqlCommand(createTableSql, connection);\nawait cmdCreate.ExecuteNonQueryAsync();\nConsole.WriteLine("Tabela usuarios criada.");\n\nInserindo dados (INSERT)
\n// Usamos consulta parametrizada — proteção contra SQL injection!\nstring insertSql = "INSERT INTO usuarios (nome, email) VALUES (@nome, @email) RETURNING id;";\n\nusing var cmdInsert = new NpgsqlCommand(insertSql, connection);\ncmdInsert.Parameters.AddWithValue("@nome", "João");