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 / dba / 问题

Perguntas[python](dba)

Martin Hope
scrollout
Asked: 2021-12-24 07:35:57 +0800 CST

Copiando um esquema PostgreSQL e seus dados de um banco de dados para outro

  • 0

Estou tentando copiar um esquema PostgreSQL e seus dados de um banco de dados para outro sem afetar a disponibilidade do esquema atual ( old_schema). Eu também gostaria de fazer isso para um subconjunto específico de tabelas dentro do esquema e quero que o novo esquema tenha um nome diferente no outro banco de dados.

Estou usando o Python para as etapas 1. e 2. no procedimento a seguir,

  1. Obtenha uma lista de nomes de tabelas old_schemaque desejo copiar.
    select
        distinct
        information_schema.columns.table_name as table_name
    from
        information_schema.columns
    where
        information_schema.columns.table_schema = 'public'
        and
        information_schema.columns.table_name ~ 'lime_.*'
    ;
  1. Percorra os nomes das tabelas, criando as mesmas tabelas nonew_schema
    create table if not exists {new_schema}.{lime_table} (like {old_schema}.{lime_table} including all);

e também copie os dados do old_schemapara o new_schemade cada tabela

    insert into {new_schema}.{lime_table} (select * from {old_schema}.{lime_table});
  1. Agora temos uma cópia das tabelas que queremos em new_schema.

Aí vem a parte com comportamento inesperado do PostgreSQL. Para migrar new_schemapara o outro banco de dados, primeiro o despejamos em um arquivo usando

    pg_dump.exe
        --host="<HOST>"
        --port=<PORT>
        --username=<USERNAME>
        --table="lime*"  // redundant because of step 1.
        --format=c
        --schema=new_schema // our `new_schema`
        --exclude-schema="public" // doesn't work, public still being written in dump file
      "<DB_NAME>" > C:\Users\<PATH>\backup.sql

No entanto, mesmo depois de copiar as tabelas de publicpara new_schemana etapa 2., especificando pg_dump para apenas dump new_schema, e também especificando para excluir o publicesquema (o esquema de onde os dados se originam), ainda temos public.<table>o arquivo de despejo! É como o descrito nesta pergunta - pg_dump não honra -n .

  1. Se o dump funcionar, o plano é usar o seguinte para copiar new_schemapara um banco de dados diferente.
    pg_restore.exe
        --host="<HOST>"
        --port=<PORT>
        --username=<USERNAME>
        --verbose -1
        --dbname="<DB_NAME>"  
      C:\Users\<PATH>\backup.sql

As versões do PostgreSQL que estou usando estão descritas nos arquivos de despejo.

-- Despejado do banco de dados versão 10.9.17

-- Despejado pelo pg_dump versão 14.1

postgresql python
  • 1 respostas
  • 616 Views
Martin Hope
Brendan Hill
Asked: 2021-12-02 00:14:00 +0800 CST

Como chamar o arquivo python no repositório em databricks da fábrica de dados fora do DBFS?

  • 1

No Azure Databricks eu tenho um repositório clonado que contém arquivos python, não notebooks.

No Azure Data Factory, quero configurar uma etapa para executar um arquivo Databricks Python. No entanto, quando eu entro no /Repos/..../myfile.py (que funciona para Databricks Notebooks) ele me dá o erro "DBFS URI deve começar com 'dbfs:'"

Como posso referenciar um arquivo python de um relatório que não está em dbfs?

insira a descrição da imagem aqui

NOTA Eu vejo uma pergunta duplicada aqui, mas a resposta foi apenas envolvê-la em um Databricks Notebook - OK solução alternativa, mas quando eu faço isso, recebo "Nenhum módulo chamado 'my_python_file'"

https://stackoverflow.com/questions/70096408/how-to-create-a-databricks-job-using-a-python-file-outside-of-dbfs

python azure
  • 1 respostas
  • 1115 Views
Martin Hope
Nijatullah Mansoor
Asked: 2021-07-18 10:15:44 +0800 CST

Erro ao ler dados da tabela MySQL 1227 (42000): Acesso negado; você precisa (pelo menos um dos) privilégios SYSTEM_USER para esta operação

  • 0

Estou conectado ao banco de dados MySQL em Python usando o módulo Python (MySQL Connector) no notebook jupyter. Posso realizar operações, por exemplo, criar uma tabela ou ler dados de uma tabela. No código a seguir, quero criar uma view, mas antes de criar uma view quero ter certeza de que o banco de dados não tem a view, caso tenha, quero eliminá-la.

import mysql.connector as con
try:
    connection = con.connect(host = 'localhost',
                             database='mydb',
                             user='***',      # my user name is also correct
                             password='****') # my password is correct
    
    create_view_query = """
    drop view if exists chicago_public;
    create view chicago_public as
    select NAME_OF_SCHOOL as school_name,Safety_Icon as afety_rating,
    Family_Involvement_Icon as family_rating,
    Environment_Icon as environment_rating,
    Instruction_Icon as instruction_rating,
    Leaders_Icon as leaders_rating,
    Teachers_Icon as teacher_rating
    from CHICAGO_PUBLIC_SCHOOLS;
     """
    
    cursor = connection.cursor()
    cursor.execute(create_view_query)
    print("View created succussfully.")
    
except con.Error as e:
    print("Error reading data from MySQL table",e)
finally:
    if connection.is_connected():
        connection.close()
        cursor.close()
        print("MySQL connection is closed")

Mas quando executo esta consulta no notebook jupyter, estou recebendo o seguinte erro.

Erro ao ler dados da tabela MySQL 1227 (42000): Acesso negado; você precisa (pelo menos um dos) privilégios SYSTEM_USER para esta operação

Por favor me ajude com isso como resolver este problema. Agradeço antecipadamente.

mysql python
  • 2 respostas
  • 320 Views
Martin Hope
bbartling
Asked: 2021-05-11 08:16:17 +0800 CST

postgres lê dados de séries temporais de reamostragem de consulta para médias horárias

  • 0

Eu sou novo no SQL tentando aprender como ler consultas em dados de séries temporais. Alguém pode me dar uma dica sobre como reamostrar dados de séries temporais de intervalo para médias horárias na consulta de leitura do postgres?

Minha tabela é nomeada building_data onde existem algumas colunas nomeadastime, metric, value, kv_tags, m_tags

timeé minha coluna de carimbo de data/hora em que estou tentando ver se posso reamostrar os dados na valuecoluna em médias horárias. A WHEREconsulta abaixo é filtrar um dispositivo específico que estou interessado em analisar os dados. Peço desculpas se isso não faz sentido.

Para um primeiro temporizador, essa consulta sql parece funcionar, mas não incorpora algum processo para reamostrar os dados em médias horárias, qualquer dica é muito apreciada.

SELECT
  "time" AS "time",
  metric AS metric,
  value,
  kv_tags,
  m_tags
FROM building_data
WHERE kv_tags->'equip_name' = '["35201"]' AND 
  m_tags IS NOT NULL
ORDER BY time desc limit 1000
postgresql python
  • 1 respostas
  • 670 Views
Martin Hope
Prince Hermit
Asked: 2021-04-09 06:06:36 +0800 CST

Filtrando caracteres de escape no PostgreSQL

  • 1

Estou tentando filtrar um número de série distinto de uma tabela e juntar duas tabelas. Atual meu código parece

SELECT DISTINCT ON (t1.serial_nbr) t1.*, q1.serl_nbr
FROM ( select
                 serial_nbr,
                 CASE
                 when substring(serial_nbr FROM 2 for 2) = '18' THEN
                 regexp_replace(serial_nbr,'(...)(\w{{5}})','\\1 \\2')
                 when substring(serial_nbr FROM 2 for 2) = '19' AND length(serial_nbr) = 9 THEN
                 regexp_replace(serial_nbr,'(...)(\w{{6}})','\\1 \\2')
                 ELSE serial_nbr END as serial
                 FROM controller_returns) as t1
LEFT JOIN dblink('{param_db}', 
            'SELECT DISTINCT ctrlr_serl_nbr,insert_ts
            FROM ctrlr_basic_setng') 
as q1(ctrlr_serl character varying,insert_ts timestamp without time zone)
on q1.ctrlr_serl_nbr = t1.serial
WHERE t1.serial_nbr~'^[ABCD]([AC0-9]{{1,9}})'
ORDER by t1.serial_nbr, substring(t1.serial_nbr from 2 for 2), substring(t1.serial_nbr from 1 for 1)

Estou usando postgreSQL e conectando usando psycopg2 em python.

Este é um código em evolução, mas notei que o número de série que estou recebendo não é realmente distinto. Às vezes, eu recebia casos como este 'A1800038' e 'A1800038\n'. O que estou tentando descobrir é como filtrar o serial com \n. Eu estava tentando fazer isso na cláusula WHERE fazendo '^[ABCD]([AC0-9][^\\n]{{1,9}})'ou '^[ABCD]([AC0-9][^[:space:]]{{1,9}})'mas nenhum dos dois funciona.

Qualquer ajuda seria muito apreciada.

postgresql python
  • 1 respostas
  • 529 Views
Martin Hope
Judy T Raj
Asked: 2021-03-18 22:10:58 +0800 CST

Verifique se uma tabela de banco de dados foi renomeada

  • 0

Meu aplicativo tem uma lista de tabelas de um banco de dados externo e precisa ser atualizado regularmente. Como verifico se uma tabela foi renomeada? ou seja, como diferenciar entre uma nova tabela e uma tabela antiga que foi renomeada? Procurando soluções sql/python/sqlalchemy que funcionem no maior número possível de mecanismos.

Estou ciente do OID no postgres , mas até onde pude dizer, não é muito confiável e não há equivalente no mysql. Suponho que poderia fazer algo com o tempo de criação e modificação do tempo, mas estou tentando ver se há uma maneira mais fácil.

Editar: O aplicativo é uma ferramenta de visualização de dados à qual os bancos de dados externos se conectam. Eu não tenho controle sobre o design dos dbs que se conectam ao aplicativo, e é por isso que preciso levar em conta as tabelas sendo renomeadas.

mysql python
  • 1 respostas
  • 72 Views
Martin Hope
illagrenan
Asked: 2021-02-09 07:20:18 +0800 CST

Erros de chave duplicada na tabela do tipo fila do Postgres quando as linhas devem ser bloqueadas por SELECT FOR UPDATE SKIP LOCKED

  • 2

Tenho uma tabela chamada queuecom itens que precisam ser processados:

CREATE TABLE public.queue (
    id serial NOT NULL
        CONSTRAINT queue_pkey
            PRIMARY KEY
);

Outra tabela processrepresenta os itens processados ​​da fila (por exemplo, um relatório foi gerado). Na realidade, existem mais tabelas desse tipo (há mais processos que precisam ser executados em um item). Existe uma relação um-para-um entre queuee process– cada item pode ser processado apenas uma vez.

CREATE TABLE public.process (
    id            serial  NOT NULL
        CONSTRAINT process_pkey
            PRIMARY KEY,
    queue_item_id integer NOT NULL
        CONSTRAINT process_queue_item_id_key
            UNIQUE
        CONSTRAINT process_queue_item_id_8953ec7b_fk_datastore
            REFERENCES public.queue
            DEFERRABLE INITIALLY DEFERRED
);

Aqui estão alguns dados de teste:

BEGIN;
TRUNCATE TABLE queue, process
    RESTART IDENTITY CASCADE;
INSERT INTO queue
SELECT GENERATE_SERIES(1, 10000);
COMMIT;

O trabalhador que processa os itens é implementado da seguinte forma. O código está em Django (framework Python), mas estou convencido de que meu erro não é causado pelo Django ou seu ORM.

(Para simplificar, não há condição de término.)

while True:
    with transaction.atomic():
        queue_items = Queue.objects \
                          .filter(process=None) \
                          .order_by() \
                          .select_for_update(skip_locked=True, of=('self',))[:8]

        print('Generating report...')
        time.sleep(0.1)

        Process.objects.bulk_create(
            (Process(queue_item=q)
             for q in queue_items)
        )

Aqui está uma transcrição das consultas SQL que viajam para o banco de dados:

-- while True:

BEGIN;

SELECT queue."id"
FROM queue
         LEFT OUTER JOIN "process"
                         ON (queue."id" = "process"."queue_item_id")
WHERE "process"."id" IS NULL
LIMIT 8 FOR UPDATE OF queue SKIP LOCKED;

-- print('Generating report...')
-- time.sleep(0.5)

INSERT INTO "process" ("queue_item_id")
VALUES (1),
       (2),
       (3),
       (4),
       (5),
       (6),
       (7),
       (8)
RETURNING "process"."id";

COMMIT;

Se eu iniciar um trabalhador, a fila será processada perfeitamente. Se eu executar dois ou mais trabalhadores, começo a receber este erro:

duplicate key value violates unique constraint "process_queue_item_id_key"
DETAIL:  Key (queue_item_id)=(**) already exists.

Como outra transação poderia criar linhas processpara itens em uma queuequando essas linhas estão bloqueadas?

O que eu tentei:

  1. Eu tentei reescrever a consulta SELECT com EXISTS:
SELECT "queue"."id"
  FROM "queue"
 WHERE NOT (EXISTS(SELECT U0."id", U0."queue_item_id" FROM "process" U0 WHERE U0."queue_item_id" = "queue"."id"))
 LIMIT 8
   FOR UPDATE OF "queue" SKIP LOCKED

sem sucesso, ocorre o mesmo erro.

  1. Se eu organizar as linhas aleatoriamente, o erro ocorre muito mais tarde (quase no final da fila).
SELECT "queue"."id"
  FROM "queue"
  LEFT OUTER JOIN "process"
    ON ("queue"."id" = "process"."queue_item_id")
 WHERE "process"."id" IS NULL
 ORDER BY RANDOM()
 LIMIT 8
   FOR UPDATE OF "queue" SKIP LOCKED
  1. Coloquei um breakpoint no meio da transação e em outra transação verifiquei que o bloqueio de linha na minha opinião funciona corretamente:
SELECT id
FROM queue
WHERE id NOT IN (
    SELECT id
    FROM queue
        FOR UPDATE SKIP LOCKED
);
  • Minha versão do Postgres: PostgreSQL 13.1, compiled by Visual C++ build 1914, 64-bit.
  • Cada trabalhador tem sua própria conexão com o Postgres com nível de isolamento padrão (leitura confirmada).
postgresql python
  • 1 respostas
  • 218 Views
Martin Hope
atevm
Asked: 2021-01-15 02:00:01 +0800 CST

O uso do CLR para expressões regulares é mais seguro do que o uso de scripts externos?

  • 3

Problema

O principal problema que precisamos é usar a expressão regular no MS SQL Server 2019, com capacidade de pelo menos o nível da expressão regular POSIX.

Soluções possíveis

Este Q/A do stackoverflow conclui corretamente que, se a consulta deve depender de expressões regulares, você deve usar o CLR. Este artigo Readgate elabora mais essa abordagem. Então, um de meus colegas e eu propusemos essa solução, mas meu outro colega afirmou categoricamente que usar CLR aqui seria um grande risco para segurança e estabilidade, e usar script externo (Python ou R) é mais seguro.

Esta parece ser uma afirmação duvidosa, uma vez que o código do usuário no CLR pode ser gerenciado , então talvez o contrário seja verdade, mas não consegui convencer meu colega.

Na minha outra pergunta que escrevi em meu desespero porque fui forçado a usar script externo e ainda produzir uma consulta extremamente rápida. O usuário do SQLpro afirma em seu comentário que:

Usar Python ou R pode ser pior em termos de segurança do que usar CLR!

Que eu costumo acreditar.

Perguntas

Então eu tenho duas perguntas:

  1. Qual solução Regexp é script externo mais seguro ou baseado em CLR (conforme descrito aqui )? E porque?

  2. Também propus executar o código python no mesmo Windows Server (deve ser o mesmo servidor, por causa de uma política) mas com o python intrepeter instalado no SO. Porque os resultados são exportados para arquivos CSV de qualquer maneira e armazenados no SQL Server. Então eu poderia usar o módulo de multiprocessamento do Python para obter o desempenho certo. A resposta foi a mesma que executar o Python dentro do SQL Server é mais seguro do que em um aplicativo externo. O que também é uma afirmação questionável.

sql-server python
  • 2 respostas
  • 280 Views
Martin Hope
LBJ33
Asked: 2020-11-04 09:31:35 +0800 CST

Otimização do MySQL - mais tabelas vs mais colunas/linhas

  • 0

Sou novo em SQL e estou procurando construir um banco de dados. Como exemplo do que estou tentando fazer é ter um banco de dados com cerca de 5000 cotações de ações. Cada ticker terá cerca de 35 data-points, correspondentes a datas específicas. Todos os dados serão INT ou uma pequena string.

Eu estou querendo saber se é melhor ter cada ticker representando uma tabela, com todos os seus pontos de dados dentro da tabela (cerca de 15 colunas e 20 linhas), ou devo colocar tudo isso em uma tabela, com o índice sendo o símbolo do ticker , então tendo um monte de colunas.

Parece mais fácil fazer uma nova tabela para cada ticker, pois posso colocar os títulos das colunas como datas e os títulos das linhas como o que os dados representam, mas não tenho certeza se isso está otimizado ou causaria problemas com várias pessoas pesquisando tabelas diferentes.

Obrigado!

EDIT: Aqui está um exemplo da tabela que estou procurando criar, é possível ter índices de 2 linhas?

insira a descrição da imagem aqui

mysql python
  • 1 respostas
  • 616 Views
Martin Hope
Mano
Asked: 2020-10-14 09:57:38 +0800 CST

Como proteger o banco de dados SQLite3 com senha que usa no aplicativo de desktop

  • 1

Estou criando banco de dados Qtsql.QSqlDatabaseusando com in python. Quero proteger meu banco de dados com senha. Estou usando esse banco de dados para meus aplicativos de desktop. Se for possível, como fazer isso. ou existe alguma ou outra maneira de criar banco de dados protegido por senha.

db = QtSql.QSqlDatabase.addDatabase("QSQLITE")#database
db.setDatabaseName("project.db")
sqlite python
  • 1 respostas
  • 3840 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