AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-203071

machineghost's questions

Martin Hope
machineghost
Asked: 2025-04-09 02:14:35 +0800 CST

O usuário do Postgres no Linux Mint não deveria ter uma senha de banco de dados... mas tem?

  • 5

Estou tentando configurar o PostgreSQL em um novo computador (Linux Mint). Tudo funciona perfeitamente até eu tentar acessar o banco de dados. Quando o faço, como meu próprio usuário, recebo o seguinte erro (esperado):

$ psql 
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  role "me" does not exist

Isso faz sentido, porque no Linux há um postgresusuário separado com acesso ao banco de dados. Tentei usá-lo:

$ sudo su postgres
[sudo] password for me:
$ psql
Password for user postgres:  psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: fe_sendauth: no password supplied

Nesse ponto, fiquei confuso: o postgresusuário deveria ter acesso sem senha a todos os bancos de dados PostgreSQL. Além disso, tentei configurar meu pg_hba.confarquivo para permitir acesso local a todos os usuários:

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

Entretanto, mesmo depois de reiniciar o PostgreSQL (com /etc/init.d/postgresql reload), ainda fui solicitado a fornecer uma senha de banco de dados para o usuário postgres.

Alguém pode me ajudar a entender:

  1. Por que estou sendo solicitado a digitar uma senha quando tento acessar meu banco de dados como postgresusuário (em uma nova instalação)?
  2. Por que ainda recebo a solicitação mesmo depois de definir conexões locais IPv4/IPv6 como trust?
  3. Como posso corrigir meu postgresusuário para que fique igual a outras máquinas Linux (ou seja, não tenha nenhuma senha de banco de dados, mas ainda consiga acessar todos os bancos de dados)?
postgresql
  • 1 respostas
  • 27 Views
Martin Hope
machineghost
Asked: 2025-02-08 01:08:56 +0800 CST

Por que o PostgreSQL não tem um tipo Create ou Replace?

  • 7

O PostgreSQL tem uma OR REPLACEvariante " " (como em " CREATE OR REPLACE ____") para tabelas, funções, visualizações, regras, etc. No entanto, ele não tem uma para tipos.

Eu poderia ir registrar um bug, mas imagino que essa foi uma decisão deliberada dos mantenedores. Minha pergunta é: por quê?

Em outras palavras, o que há de diferente nos tipos que os faz não precisar de um OR REPLACE(mesmo que tabelas, funções, etc. precisem)?

PS Acabei de descobrir que ele tem um DROP TYPE IF EXISTS... o que só me confunde mais. Realmente parece que CREATE TYPEfoi escolhido para não ter um IF EXISTS, e eu simplesmente não vejo o porquê.

postgresql
  • 1 respostas
  • 38 Views
Martin Hope
machineghost
Asked: 2025-01-14 08:29:27 +0800 CST

O PostgreSQL tem algum tipo de tipo "curinga" para retornos de função?

  • 8

No PostgreSQL, a RETURNSpalavra-chave exige que você especifique o tipo exato que a função retorna. Isso pode ser um incômodo quando esse tipo é o resultado de uma consulta com vários JOINs, pois você acaba tendo que criar manualmente um TABLEtipo com cada coluna de cada tabela JOIN-ed. Se você se juntou employeescom profilesand jobs, agora você tem que listar todas as três colunas da tabela:

RETURNS TABLE(
  -- employees field #1
  -- employees field #2
  -- employees field etc.
  -- ... profiles fields
  -- ... jobs fields
)

Existe algum tipo de atalho para evitar isso e apenas dizer ao PostgreSQL "retorne o que a consulta retornar; não se preocupe com o tipo"? Eu descobri que o PostgreSQL tem um anytipo ... mas ele não parece deixar você usá-lo em uma RETURNScláusula.

Caso contrário, existe alguma maneira de criar tipos combinando outros tipos (por exemplo, o JOIN_TABLE(employees, profiles, jobs)tipo) ou criar tipos a partir de tabelas existentes (por exemplo, TABLE(...employees, integer job_id))?

postgresql
  • 2 respostas
  • 155 Views
Martin Hope
machineghost
Asked: 2025-01-13 02:35:11 +0800 CST

Fazer um loop pelos resultados do PostgreSQL e retornar um resultado somente se uma segunda consulta tiver resultados?

  • 5

Estou tentando escrever uma função recursiva do PostgreSQL que basicamente diz:

  1. Pegue um ID de grupo
  2. Se houver um item naquele grupo, devolva-o
  3. Caso contrário, encontre os subgrupos do grupo
  4. Repita a função em cada um dos subgrupos

A função recebe um ID de grupo e o título de um item a ser encontrado, e o que tenho até agora para o corpo é:

RETURN QUERY SELECT -- ... return children with title, if any
-- If there were none, look for grandchildren (and so on)
IF NOT FOUND THEN
   -- Loop through the sub-group IDs
   FOR sub_group_id IN
     SELECT -- ... sub-groups of the provided group
   LOOP
     -- Recursion time ... stuck here

O que eu quero expressar é:

  1. Correr SELECT * FROM this_function(sub_group_id, title);
  2. Se retornar > 0 resultados, retorne esses resultados
  3. Se isso não acontecer, continue em loop

Mas se eu apenas disser:

LOOP
  RETURN QUERY SELECT * FROM this_function(sub_group_id, title);

não tem o efeito desejado. Alguém pode me ajudar a expressar o acima no PostgreSQL?

postgresql
  • 1 respostas
  • 26 Views
Martin Hope
machineghost
Asked: 2022-08-01 15:00:30 +0800 CST

Não é possível usar o usuário recém-criado para executar o comando Postgres createdb

  • 0

Versão curta:

Eu recebo:

erro: falha na conexão com o servidor no soquete "/var/run/postgresql/.s.PGSQL.5432": FATAL: Falha na autenticação de peer para o usuário "admin"

quando tento createdb --username admin --password mynewdb... mas criei o usuário "admin" no Linux e no PostgreSQL, então não entendo porque não posso usá-los.

Versão longa:

Estou tentando criar um usuário "admin" para executar o SQL em uma nova máquina Ubuntu/AWS. Eu criei o usuário com

$ sudo useradd -g admin admin

Então eu defino a senha deles usando:

$ sudo passwd admin

Eu sei que a senha foi definida corretamente, porque posso alternar para o usuário "admin" digitando essa senha, com:

$ su - admin

Também criei uma função de banco de dados para o usuário, com:

CREATE ROLE admin WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'samepassword';

e posso ver que o usuário foi criado com \du(de dentro psql):

 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 admin     | Superuser, Create role, Create DB                          | {}

Além disso, posso confirmar, a partir do meu pg_hba.confarquivo, que o Postgres deve usar a senha "peer" (ou seja, sistema) para esse usuário:

local   all             all                                     peer

E reiniciei o Postgres, só por segurança:

sudo service postgresql restart

No entanto, apesar de todos os itens acima, quando tento criar um novo banco de dados com esse usuário "admin", usando createdb, recebo minha senha duas vezes e falha:

$ createdb --username admin --password mynewdb
Password: 
Password: 
createdb: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed:
FATAL:  Peer authentication failed for user "admin"

Eu tentei ler outras respostas SO para este erro, mas todas elas sugerem coisas que eu tentei (ou seja, alterar pg_hba.conf, reiniciar o Postgres, etc.) Eu adoraria ouvi-los.

postgresql linux
  • 1 respostas
  • 138 Views
Martin Hope
machineghost
Asked: 2022-07-11 16:55:57 +0800 CST

Como posso escrever um Postgres "if" com base em um SELECT?

  • 0

Se eu tiver uma função no PostgreSQL, posso validar seus argumentos (por exemplo, um usernameargumento) assim:

IF LENGTH(username) < 4 THEN
    RAISE EXCEPTION 'Usernames must contain at least four characters';
END IF;

O que não consigo descobrir é como fazer a mesma coisa com os resultados de uma consulta SELECT, ou seja. algo como:

IF LENGTH(SELECT * FROM USERS WHERE username=username) > 1 THEN
    RAISE EXCEPTION 'Username already exists';
END IF;

(E sim, eu sei que o PostgreSQL me dará um erro sem essa linha, mas quero ter uma mensagem de erro mais amigável.)

É possível algo assim no (Postgre)SQL e, se sim, alguém pode me indicar a sintaxe (ou um exemplo dela) que eu possa ver?

postgresql functions
  • 1 respostas
  • 20 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve