AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[python](dba)

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

将 PostgreSQL 模式及其数据从一个数据库复制到另一个数据库

  • 0

我正在尝试将 PostgreSQL 架构及其数据从一个数据库复制到另一个数据库,而不会影响当前架构 ( old_schema) 的可用性。我还想对模式中的特定表子集执行此操作,并希望新模式在另一个数据库中具有不同的名称。

在以下过程中,我将 Python 用于步骤 1. 和 2.,

  1. old_schema从中获取我要复制的表名列表。
    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. 遍历表名,在new_schema
    create table if not exists {new_schema}.{lime_table} (like {old_schema}.{lime_table} including all);

并将数据从每个表复制old_schema到new_schema

    insert into {new_schema}.{lime_table} (select * from {old_schema}.{lime_table});
  1. 现在我们有了我们想要的表的副本new_schema。

这是 PostgreSQL 出现意外行为的部分。为了将其迁移new_schema到另一个数据库,我们首先将其转储到一个文件中

    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

但是,即使在步骤 2 中将表从publicto复制到之后new_schema,将 pg_dump 指定为仅 dump new_schema,并且还指定排除public模式(数据源自的模式),我们仍然会public.<table>进入转储文件!就像这个问题中概述的一样 - pg_dump 不尊重 -n。

  1. 如果转储工作,计划是使用以下复制new_schema到不同的数据库。
    pg_restore.exe
        --host="<HOST>"
        --port=<PORT>
        --username=<USERNAME>
        --verbose -1
        --dbname="<DB_NAME>"  
      C:\Users\<PATH>\backup.sql

我正在使用的 PostgreSQL 版本在转储文件中进行了概述。

-- 从数据库版本 10.9.17 转储

-- 由 pg_dump 版本 14.1 转储

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

如何从 DBFS 外部的数据工厂调用数据块中 repo 中的 python 文件?

  • 1

在 Azure Databricks 中,我有一个克隆的存储库,其中包含 python 文件,而不是笔记本。

在 Azure 数据工厂中,我想配置一个步骤来运行 Databricks Python 文件。但是,当我输入 /Repos/..../myfile.py(适用于 Databricks Notebooks)时,它给了我错误“DBFS URI 必须以 'dbfs:' 开头”

如何从不在 dbfs 中的报告中引用 python 文件?

在此处输入图像描述

注意我在这里看到一个重复的问题,但答案只是将其包装在 Databricks Notebook 中 - 好的解决方法,但是当我这样做时,我得到“没有名为 'my_python_file' 的模块”

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

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

从 MySQL 表 1227 (42000) 读取数据时出错:访问被拒绝;您需要(至少一个)SYSTEM_USER 权限才能执行此操作

  • 0

我使用 jupyter notebook 中的 (MySQL Connector) Python 模块连接到 Python 中的 MySQL 数据库。我可以执行操作,例如创建表或从表中读取数据。在下面的代码中,我想创建一个视图,但在首先创建视图之前,我想确保数据库没有视图,如果我想删除它。

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")

但是,当我从 jupyter notebook 运行此查询时,我收到以下错误。

从 MySQL 表 1227 (42000) 读取数据时出错:访问被拒绝;您需要(至少一个)SYSTEM_USER 权限才能执行此操作

请帮助我解决这个问题。先感谢您。

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

postgres 读取查询重新采样时间序列数据以获取每小时平均值

  • 0

我是 SQL 新手,试图学习如何对时间序列数据进行读取查询。有人可以给我一个关于如何将间隔时间序列数据重新采样为 postgres 读取查询的每小时平均值的提示吗?

我的表名为 building_data ,其中有几列名为time, metric, value, kv_tags, m_tags

time是我的日期/时间戳列,我试图查看是否可以将value列中的数据重新采样为每小时平均值。下面WHERE的查询是为了过滤掉我有兴趣查看数据的特定设备。如果这没有意义,我很抱歉。

对于第一个计时器,此 sql 查询似乎可以工作,但它没有包含一些以每小时平均值重新采样数据的过程,非常感谢任何提示。

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 个回答
  • 670 Views
Martin Hope
Prince Hermit
Asked: 2021-04-09 06:06:36 +0800 CST

在 PostgreSQL 中过滤转义字符

  • 1

我正在尝试从表中过滤不同的序列号并加入两个表。当前我的代码看起来像

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)

我正在使用 postgreSQL 并通过在 python 中使用 psycopg2 进行连接。

这是不断发展的代码,但我注意到我得到的序列号并不是真正不同的。我有时会遇到像“A1800038”和“A1800038\n”这样的情况。我想弄清楚的是如何用 \n 过滤掉序列号。我试图在 WHERE 子句中执行此操作'^[ABCD]([AC0-9][^\\n]{{1,9}})','^[ABCD]([AC0-9][^[:space:]]{{1,9}})'但都不起作用。

任何帮助将非常感激。

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

检查数据库表是否已重命名

  • 0

我的应用程序有一个外部数据库表的列表,需要定期更新。如何检查表是否已重命名?即如何区分新表和已重命名的旧表?寻找可以在尽可能多的引擎中工作的 sql/python/sqlalchemy 解决方案。

我知道postgres 中的 OID,但据我所知,它不是很可靠,并且 mysql 中没有等价物。我想我可以对创建时间和修改时间做一些事情,但我想看看是否有更简单的方法。

编辑:该应用程序是外部数据库连接到的数据可视化工具。我无法控制连接到应用程序的 dbs 的设计,这就是为什么我需要考虑表被重命名的原因。

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

当行应由 SELECT FOR UPDATE SKIP LOCKED 锁定时,Postgres 类似队列的表中出现重复键错误

  • 2

我有一个表queue,其中包含需要处理的项目:

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

另一个表格process表示来自队列的已处理项目(例如,已生成报告)。实际上,有更多这样的表(需要对一个项目执行更多的过程)。queue和之间存在一对一的关系process——每个项目只能处理一次。

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
);

以下是一些测试数据:

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

处理项目的工作人员实现如下。代码在 Django(Python 框架)中,但我确信我的错误不是由 Django 或其 ORM 引起的。

(为简单起见,没有终止条件。)

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

以下是传输到数据库的 SQL 查询的记录:

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

如果我启动一名工作人员,则队列处理得非常好。如果我运行两个或更多工作人员,我开始收到此错误:

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

当这些行被锁定时,另一个事务如何为其中process的项目创建行?queue

我尝试了什么:

  1. 我试图用 EXISTS 重写 SELECT 查询:
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

没有成功,就会发生同样的错误。

  1. 如果我随机排列行,则错误发生得更晚(几乎在队列的末尾)。
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. 我在事务中间放了一个断点,在另一个事务中我检查了我认为行锁定是否正常工作:
SELECT id
FROM queue
WHERE id NOT IN (
    SELECT id
    FROM queue
        FOR UPDATE SKIP LOCKED
);
  • 我的 Postgres 版本:PostgreSQL 13.1, compiled by Visual C++ build 1914, 64-bit.
  • 每个工作人员都有自己与 Postgres 的默认隔离级别(已提交读)连接。
postgresql python
  • 1 个回答
  • 218 Views
Martin Hope
atevm
Asked: 2021-01-15 02:00:01 +0800 CST

将 CLR 用于正则表达式是否比使用外部脚本更安全?

  • 3

问题

我们需要在 MS SQL Server 2019 上使用正则表达式的主要问题,至少具有 POSIX 正则表达式级别的能力。

可能的解决方案

这个来自 stackoverflow的 Q/A正确地得出结论,如果您的查询必须依赖正则表达式,您应该使用 CLR。这篇 Readgate文章更详细地阐述了这种方法。所以我和我的一位同事提出了这个解决方案,但是我的另一位同事断然表示,这里使用 CLR 会对安全性和稳定性造成巨大风险,使用外部脚本(Python 或 R)更安全。

这似乎是可疑的说法,因为CLR 中的用户代码是可以管理的,所以也许相反,但我无法说服我的同事。

在我绝望中写的另一个问题中,因为我被迫使用外部脚本并且仍然产生极快的查询。SQLpro 用户在他的评论中指出:

就安全性而言,使用 Python 或 R 可能比使用 CLR 更差!

我倾向于相信。

问题

所以我有两个问题:

  1. 哪个 Regexp 解决方案更安全的外部脚本或基于 CLR(如此处所述)?为什么?

  2. 我还建议在同一个 Windows 服务器上运行 python 代码(必须是同一个服务器,因为策略),但在操作系统上安装了 python intrepeter。因为结果以任何一种方式导出为 CSV 文件并存储在 SQL Server 中。因此,我将能够使用 Python 的多处理模块来实现正确的性能。答案是一样的,在 SQL Server 中运行 Python 比在外部应用程序中更安全。这也是一个有问题的说法。

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

MySQL 优化 - 更多表与更多列/行

  • 0

我是 SQL 新手,想建立一个数据库。作为一个例子,我想要做的是有一个包含大约 5000 个股票代码的数据库。每个代码将有大约 35 个数据点,对应于特定日期。所有数据将是 INT 或小字符串。

我想知道是否最好让每个股票代表一个表,其所有数据点都在表内(大约 15 列和 20 行),或者我应该把这些都放在一个表中,索引是股票符号,然后有一堆列。

为每个代码创建一个新表似乎更容易,因为我可以将列标题作为日期,将行标题作为数据表示的内容,但不确定这是否已优化或会导致多人搜索不同表的问题。

谢谢!

编辑:这是我要创建的表的示例,这可能有 2 行索引吗?

在此处输入图像描述

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

如何使用桌面应用程序中使用的密码保护 Sqlite3 数据库

  • 1

我正在Qtsql.QSqlDatabase使用 with in创建数据库python。我想用密码保护我的数据库。我正在将此数据库用于我的桌面应用程序。如果可能,如何做到这一点。或者是否有任何或其他数据库方法来创建受密码保护的数据库。

db = QtSql.QSqlDatabase.addDatabase("QSQLITE")#database
db.setDatabaseName("project.db")
sqlite python
  • 1 个回答
  • 3840 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve