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-99705

eComEvo's questions

Martin Hope
eComEvo
Asked: 2019-12-20 12:50:48 +0800 CST

Bloqueando a tabela de descarte para esquema específico usando o gatilho

  • 0

Estou tentando impedir que alguém solte tabelas em um esquema específico "público", a menos que o usuário seja um, rds_superusermas a função que escrevi está protegendo todos os esquemas.

CREATE OR REPLACE FUNCTION guard_tables()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
BEGIN
IF TG_TABLE_SCHEMA = 'public' AND (SELECT COUNT(*) FROM pg_roles WHERE pg_has_role(CURRENT_USER, oid, 'member') AND rolname = 'rds_superuser') = 0 THEN
RAISE EXCEPTION 'command % is disabled for this table', tg_tag;
END IF;
END;
$$;

Como faço para que isso funcione?

postgresql plpgsql
  • 1 respostas
  • 152 Views
Martin Hope
eComEvo
Asked: 2018-01-24 19:09:26 +0800 CST

Acessando o valor da tabela OLD/NEW em uma função de gatilho em SQL simples

  • 9

Estou tentando construir uma função de gatilho para atualizar automaticamente os valores do pedido pai sempre que qualquer um de seus itens for alterado.

Isto é o que eu criei:

CREATE OR REPLACE FUNCTION update_totals() RETURNS void AS $$
    UPDATE orders SET
       total_fees = (SELECT SUM(fees) FROM order_items WHERE order_id = OLD.order_id),
       total_profit = (CASE WHEN total_cost IS NOT NULL THEN total - total_tax - total_cost - (SELECT SUM(fees) FROM order_items WHERE order_id = OLD.order_id) ELSE NULL END)
    WHERE id = OLD.order_id;
$$
LANGUAGE SQL;

CREATE TRIGGER update_totals AFTER INSERT 
OR UPDATE OF fees
ON order_items INITIALLY DEFERRED
FOR EACH ROW
WHEN ( OLD.* IS DISTINCT FROM NEW.* ) EXECUTE PROCEDURE update_totals();

Quando tento executar isso, recebo este erro:

missing FROM-clause for table "old"

Tentei criar uma referência para a tabela original na trigger:

CREATE TRIGGER update_totals AFTER INSERT 
OR UPDATE OF fees
ON order_items
REFERENCING OLD ROW AS old_order
DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW
WHEN ( OLD.* IS DISTINCT FROM NEW.* ) EXECUTE PROCEDURE update_totals();

Mas isso só dá o erro syntax error at or near "REFERENCING".

Como faço para obter o da tabela order_idoriginal ?order_items

postgresql functions
  • 1 respostas
  • 25594 Views
Martin Hope
eComEvo
Asked: 2018-01-12 11:24:39 +0800 CST

MySQL for loop para mostrar resultados agrupados

  • 1

Estou tentando mostrar resultados por 12 meses usando esta consulta:

SELECT 
    COUNT(DISTINCT user_id) as customers,
    SUM(amount)*.01 as amount,
    SUM(amount_refunded)*.01 as refunded,
    MONTH(MAX(created_at)) as month
FROM `payments`
WHERE `amount` > 0
AND `status` = 'succeeded'
AND `created_at` BETWEEN NOW() - INTERVAL 2 MONTH AND NOW() - INTERVAL 1 MONTH
AND `user_id` IN (SELECT `id` FROM `users` WHERE `created_at` BETWEEN NOW() - INTERVAL 2 MONTH AND NOW() - INTERVAL 1 MONTH);

Poderia facilmente fazer isso programaticamente usando PHP para gerar uma tabela HTML onde cada linha inclui mostra um mês diferente, incrementando o mês e consultando o banco de dados novamente a cada vez.

Como eu faria isso com esta consulta usando um loop MySQL FOR? Essa seria mesmo a abordagem correta?

mysql
  • 1 respostas
  • 1537 Views
Martin Hope
eComEvo
Asked: 2017-05-11 05:20:36 +0800 CST

Calculando o intervalo em dias com base na velocidade média

  • 2

Tenho uma orderstabela e preciso calcular quando há uma mudança na contagem média ao longo do tempo. Isso pode ser um aumento ou uma diminuição.

Por exemplo, se geralmente há 1 pedido a cada dois dias, preciso detectar se de repente aumentou para 3 pedidos todos os dias ou diminuiu para 1 pedido a cada 3 dias.

Exemplo de estrutura e dados da tabela:

CREATE TABLE "public"."orders" (
    "id" SERIAL,
    "created_at" timestamp NOT NULL,
    PRIMARY KEY ("id")
);

INSERT INTO "orders" ("created_at")
VALUES
(now() - interval '1 hours'),
(now() - interval '6 hours'),
(now() - interval '12 hours'),
(now() - interval '2 days'),
(now() - interval '4 days'),
(now() - interval '6 days'),
(now() - interval '9 days');

No conjunto de dados acima, suponho que eu queria detectar que, ao longo da última semana, geralmente há apenas 1 pedido a cada 2 dias, mas nas últimas 24 horas esse padrão foi violado com 3 pedidos em um dia.

Resultado desejado:

  • Média de pedidos dos 7 dias anteriores por dia (não incluindo as últimas 24 horas): 0,43
  • Velocidade média do pedido dos 7 dias anteriores (não incluindo as últimas 24 horas): 1 pedido a cada 2 dias
  • Pedidos das últimas 24 horas: 3

Cenário alternativo:

INSERT INTO "orders" ("created_at")
VALUES
(now() - interval '12 hours'),
(now() - interval '2 days'),
(now() - interval '2 days'),
(now() - interval '2 days'),
(now() - interval '3 days'),
(now() - interval '3 days'),
(now() - interval '3 days'),
(now() - interval '4 days'),
(now() - interval '4 days'),
(now() - interval '4 days'),
(now() - interval '5 days'),
(now() - interval '5 days'),
(now() - interval '5 days'),
(now() - interval '6 days'),
(now() - interval '6 days'),
(now() - interval '6 days'),
(now() - interval '7 days'),
(now() - interval '7 days'),
(now() - interval '7 days');

Como alternativa, suponha que eu tenha o conjunto de dados acima. Normalmente, há aproximadamente 3 pedidos todos os dias na última semana, mas nas últimas 24 horas houve apenas 1 pedido.

Resultado desejado:

  • Média de pedidos dos 7 dias anteriores (não incluindo as últimas 24 horas): 2,57
  • Velocidade média dos pedidos dos 7 dias anteriores (não incluindo as últimas 24 horas): 3 pedidos a cada 1 dia
  • Pedidos das últimas 24 horas: 1

Como eu faria isso?

PostgreSQL 9.6

postgresql postgresql-9.6
  • 1 respostas
  • 593 Views
Martin Hope
eComEvo
Asked: 2017-05-05 10:07:33 +0800 CST

Consultar a matriz JSON do Postgres para valores em texto

  • 2

Como eu consultaria uma coluna de matriz JSON como essa para texto em cada um dos valores da matriz e retornaria apenas as linhas que os possuem?

["Mr Smith","Ms Wellington","Mr Anderson"]

Eu tentei isso, mas nenhum retornou resultados quando eu sei que eles existem:

select * from people where names::jsonb ? 'Mr';
select * from people where names::jsonb @> 'Mr';
postgresql postgresql-9.6
  • 2 respostas
  • 6765 Views
Martin Hope
eComEvo
Asked: 2017-03-29 17:50:50 +0800 CST

Postgres join onde a tabela estrangeira tem TODOS os registros

  • 4

Eu tenho isso peoplee tagsmesa, assim,

CREATE TABLE people
AS
  SELECT *
  FROM ( VALUES
    (1,'Joe'),
    (2,'Jane')
  ) AS t(id,name);

CREATE TABLE tags
AS
  SELECT * FROM ( VALUES
    (1, 1, 'np'),
    (2, 1, 'yw'),
    (3, 2, 'np')
  ) AS t(id, people_id, tag);

Se eu quiser encontrar tudo o peopleque contém as tags npe na tabela usando uma junção, como eu faria isso de forma eficiente no Postgres 9.6?ywtags

Nesse cenário, devo apenas obter o registro de Joe da peopletabela.

postgresql postgresql-9.6
  • 5 respostas
  • 636 Views
Martin Hope
eComEvo
Asked: 2017-01-26 19:15:18 +0800 CST

Recriando uma tabela Postgres com todas as relações em cascata transferidas

  • 2

Estou tentando otimizar a estrutura de uma tabela. Para fazer isso, coloquei as colunas na ordem mais otimizada possível e executei esta consulta (simplificada):

INSERT INTO table_new ("id", "some_field", "some_other_field") SELECT "id", "some_field", "some_other_field" FROM table_current;

Então eu simplesmente renomeio a tabela e adiciono todos os mesmos índices e chaves estrangeiras.

ALTER TABLE "table_current" RENAME TO "table_old";
ALTER TABLE "table_new" RENAME TO "table_current";
ALTER TABLE "table_current" ADD PRIMARY KEY ("id") NOT DEFERRABLE INITIALLY IMMEDIATE;

Isso funcionou muito bem no passado, mas neste caso em particular, existem muitas outras tabelas com chaves estrangeiras em cascata nesta tabela.

Portanto, se eu recriar e renomear, todas as outras tabelas ainda farão referência table_oldem suas chaves estrangeiras em vez do novo table_current.

Como faço uma migração de tabela como essa sem ter que recriar as chaves estrangeiras em todas as outras tabelas também?

postgresql postgresql-9.6
  • 1 respostas
  • 114 Views
Martin Hope
eComEvo
Asked: 2016-09-28 13:52:26 +0800 CST

Conecte-se como usuário postgres no AWS RDS para instalar a extensão para pg_catalog

  • 3

Preciso me conectar à nossa instância AWS RDS PostgreSQL 9.5 para poder adicionar a citextextensão ao pg_catalogesquema para que fique disponível para todos os esquemas (o PG precede pg_catalogo início do search_pathpor padrão).

Eu sou facilmente capaz de fazer isso na minha máquina local:

> sudo su - postgres
> psql
> \c mydatabase
> CREATE EXTENSION IF NOT EXISTS citext SCHEMA pg_catalog;
> \q
> exit

Se eu fizer login no RDS usando uma conexão direta, como mostram os documentos da AWS, recebo permission denied for schema pg_catalogquando tento CREATE EXTENSION:

psql
   --host=myrdsawshostname
   --port=5432
   --username=myusername
   --password
   --dbname=mydatabase

Esta é a única maneira que conheço de conectar e só consigo conectar como "myusername" e não "postgres".

O que eu estou fazendo errado aqui?

postgresql permissions
  • 1 respostas
  • 2113 Views
Martin Hope
eComEvo
Asked: 2016-08-20 09:43:49 +0800 CST

Postgres em cascata trunca para tabelas não relacionadas

  • 2

Eu criei várias tabelas em meu esquema público.

Ocasionalmente, preciso executar um seeder para atualizar a userstabela quando realizo testes. Para fazer isso, estou executando TRUNCATE TABLE users RESTART IDENTITY CASCADE.

No entanto, não quero que outras tabelas, exceto aquelas relacionadas à userstabela, sejam afetadas. A única chave estrangeira que faz referência à userstabela está na teamstabela que faz referência usersa owner_id. A teamstabela trunca como esperado.

O que não é esperado é que a attributestabela também seja truncada por TRUNCATE TABLE users RESTART IDENTITY CASCADE.

A attributestabela tem uma chave estrangeira na accountstabela que faz referência à userstabela. No entanto, na attributestabela, TODOS account_idos valores são NULL, portanto, não há nenhuma referência real em nenhum dos registros para um registro específico na accountstabela. Na verdade, no momento da execução da consulta truncada, toda a accountstabela já está vazia.

Como então está TRUNCATE TABLE users RESTART IDENTITY CASCADEfazendo com que minha tabela de atributos seja truncada com base em NULLchaves estrangeiras?

postgresql postgresql-9.5
  • 1 respostas
  • 695 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