PostgreSQL模式设计

设计PostgreSQL模式的首选方法是什么?您建议使用特定的图形设计工具,还是只在纸上设计模式,然后手工创建所有内容?我使用of创建模式的漂亮图片-但我更愿意手工创建实际在数据库上运行的DDL。您也可以尝试 用于创建ER图 对于管理DDL脚本,我有很好的Liquibase经验,Power Architect也可以直接从ER图创建Liquibase XML。我主要使用纸张或直接在psql提示符中绘制模式 许多UML工具都有DDL生成(参见argouml),但根据我的经验,直接编写模式更快

在PostgreSQL中引用子查询列

我非常熟悉MySQL语法,但在进入PostgreSQL环境时似乎遇到了一些成长中的困难。在MySQL中,您可以很容易地引用联接子查询中的列,但我在PostgreSQL中遇到了错误 例如: SELECT a.userID, b.firstname, c.minCounter FROM users a JOIN users_info b ON (a.userID = b.userID) LEFT JOIN ( SELECT user_id, COUNT(*)

如何在postgresql中从DB中查找特定表?

在我的数据库中,我有642个表。 我必须从中搜索名称中包含EMPSAL的特定表。 但像上面一样,有很多表在名称的开头或结尾或两者之间包含这个关键字 所以我想列出在任何地方都有EMPSAL名称的表 A我对postgresql比较新,所以我不知道如何做到这一点 有什么方法可以帮助我这样做吗 对此有何建议?此查询: 选择表格名称 来自信息\u schema.tables 其中表_schema='public' 和表u type='BASE table' 应该为您提供数据库中所有表的列表。然后,您可以在

Postgresql 如何在一年中给定的月份中查找该月份的周数?

鉴于我有“YYYY-MM”格式的月份和年份,我如何查找该月份的周数 e、 g.2014-07年有5周 我认为这个想法是找到一个月的最后一个日期,然后找到该日期当月的一周。如果我输入了一个正确的日期,下面的方法就可以了,但是由于我的起点是YYYY-MM,我不确定如何重新构建日期/时间戳 SELECT TO_CHAR(DATE_TRUNC('month', timestamp '2014-07-31') + INTERVAL '1 month' - INTERVAL '1 day', 'w

Postgresql 检查用户的Postgres访问权限

我已经查阅了所找到的GRANT文档,我试图看看是否有一个内置函数可以让我查看数据库中的可访问性级别。当然有: \dp和\dp mytablename 但这并没有显示我的帐户可以访问什么。我想查看我可以访问的所有表。有人能告诉我是否有一个命令可以检查我在Postgres中的访问级别(我是否有SELECT,INSERT,DELETE,UPDATE特权)?如果是这样,那么该命令是什么?您可以在信息架构中查询表\u privileges表: SELECT table_catalog, table_sch

Postgresql 通过外键获取表名

数据库中有两个表。第一个表具有第二个表的外键 我可以通过外键从第一个表中获取第二个表名吗?可以 SELECT ct.oid, conname, condeferrable, condeferred, confupdtype, confdeltype, confmatchtype, conkey, confkey, confrelid, nl.nspname as fknsp, cl.relname as fktab, nr.nspname as refnsp, cr.relname as ref

Postgresql Postgres查询列出与特定标记匹配的项目的所有大众分类标记

我正在开发一个Postgres数据库,存储可标记的项目;它为此使用了典型的结构(表用于具有item_id的项,表用于具有tag_id和tag_名称的标记,表用于给定项具有给定标记的每个实例)。我组装了这个查询,它几乎满足了我的要求,检索至少一个与所选标记匹配的项,并显示有关该项的所有信息: SELECT items.item_id, items.item_name, items.item_description, ARRAY_AGG(tags.tag_name) AS tag_name_

Postgresql 使用find_或create_by时解决竞争条件

我正在使用 @current_device ||= Device.find_or_create_by!(udid: request.headers["udid"]) 有时会出现竞争情况,由于网络行为,两个请求同时出现,这会导致使用相同的udid创建两个设备,即使udid列上存在唯一性验证 我试着把它吞没 begin @current_device ||= Device.find_or_create_by!(udid: request.headers["udid"]) rescue Ac

如何在postgresql trigram模块中使用多字节字符?

我在posgtresql(创建扩展名pg_trgm;)中使用三元字符串比较。但是,当我试图在一个具有三元索引的表中插入一个带有多字节字符的字符串时('您的区域设置是什么?@Renzo ENCODING='UTF8'LC_COLLATE='English_United.1252'LC_CTYPE='English_United.1252'

Postgresql docker容器启动时pg_恢复缓慢

我有我的PostgreSQL数据库(大约4GB的数据)。它在我的笔记本上运行良好(linux、2核心CPU、SSD、8GB RAM)。我正在尝试使用docker hub移动它以释放AWS EC2 t2.micro 在容器启动时,会执行一些脚本,这些脚本设置模式和表的结构,并使用pg_restore(自定义压缩格式)用数据填充它。在我的笔记本上大约需要20分钟。但在t2.micro上,它看起来可能需要几个小时或几天的时间(10小时后集群中有2.4GB) 问题是,为什么它这么慢,而进程(postgr

Postgresql 如何获取Postgres 9.5 UPSERT上插入的行的id

我不知道这是一个bug,一个特性还是文档中的一个问题 假设我有这张桌子: CREATE TABLE tags( id BIGSERIAL PRIMARY KEY, value TEXT UNIQUE NOT NULL, creation_time TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP ); 如果运行INSERT-INTO-tags(value)VALUES('a'),则返回id您将获得新插入值的id,但: 再次使用 INSERT-INTO-ta

Postgresql Ebean不是Play-2.5(OneToMany)的级联持久性

这是我的模型 用户: @Entity @Table(name="users") public class User extends Model { String username; @Id String id; @OneToMany(cascade = CascadeType.ALL) List<Tag> tags; } 持久性代码(已删除不必要的代码): 在向用户对象添加标记后,我正在调用Ebean.save(user)。 在用户上添加的标记不会持久化到数据库

如何连接SAP HANA STUDIO和PostgreSQL?

我是SAP HANA新手,我想连接到PostgreSQL服务器。因此,我打开了SAP HANA STUDIO,然后单击“添加系统”,并给出了PostgreSQL数据库的主机名、用户名和密码。但它不起作用 这样,我们只能连接到SAP HANA系统吗?如果是这样,如何连接到PostgreSQL并访问STUDIO中的数据?提前感谢。SAP HANA STUDIO仅与SAP HANA一起工作,而不与其他DBMS一起工作。由于HANA STUDIO本质上是一个带有一些SAP插件的Eclipse,我想应该有

Postgresql 使用哈希设置postgres密码

我需要将角色从一个postgresql数据库克隆到另一个数据库。是否可以以某种方式提取角色密码哈希并在另一个数据库中设置它?我希望避免任何明确的密码操作…如果PostgreSQL认为您正在使用MD5哈希设置密码,它会直接存储它。从 如果提供的密码字符串已采用MD5加密格式,则无论指定了加密还是未加密,都会按原样加密存储,因为系统无法解密指定的加密密码字符串。这允许在转储/恢复期间重新加载加密密码 您可以从pg_shadow中选择密码,并按照Eavn所告诉的文档使用它。或者您可以使用pg_dump

Postgresql 从点阵列创建postgres postgis多边形

我有一个位置数组,我想将它们作为多边形列插入postgres表中 我有一个列area,类型为geometry(Polygon,4326) 我正在将上述数据转换为字符串 const transform = area.map(position => return `${position.lat} ${position.lng}`}).join(', ') 然后使用bookshelf和knex posgis进行插入查询 const body = Object.assign({}, att

Postgresql 为postgis过滤openstreetmap数据

我正在创建一个postgis数据库,希望使用过滤后的OpenStreetMap数据 为此,我尝试了以下过程: 从下载了planet.osm.bz2文件 使用bzip2解包到*.osm 通过命令提示符使用osmfilter筛选文件 在命令提示符下使用osm2pgsql将筛选后的*.osm文件上载到我的数据库 对于我的第一次尝试,我只过滤了陆地面积 但是,在使用osm2pgsql的步骤4中,我在命令提示符中收到以下错误:“osm2pgsql由于错误而失败:第3137102行第61列的XML解析错误:

Postgresql 如何使用PySpark将JSON列类型写入Postgres?

我有一个Postgresql表,它有一个数据类型为JSONB的列 如何通过JDBC向Postgresql表插入DataFrame 如果我有一个UDF将body列转换为JSONBPostgresql数据类型,我应该使用什么对应的数据类型 带有JSONB列的Postgresql表: CREATE TABLE dummy ( id bigint, body JSONB ); 创建表虚拟( id bigint, 身体JSONB ); 谢谢 结果是,如果我将“stringtype”:“unspec

Postgresql 使用滞后函数postgres的日期差异

我有客户ID和交易日期(yyyy-mm-dd),如下所示 Cust_id Trans_date 1 2017-01-01 1 2017-01-03 1 2017-01-06 2 2017-01-01 2 2017-01-04 2 2017-01-05 我需要找出按客户id分组的每笔交易的天数差异 我尝试使用date_diff并使用滞后函数进行提取,但我遇到了错误 函数滞后(没有时区的时间戳)只能作为窗口函数调用 我正在寻找

PostgreSQL中的总和HH:mm

我需要在PostgreSQL中求和HH:mm,如下所示: '01:52' + '02:08' = '04:00' 这是服务台软件(计算服务时间) 有可能吗?谢谢你们 使用间隔 t=# select '01:52'::interval + '02:08'::interval; ?column? ---------- 04:00:00 (1 row) 使用间隔 t=# select '01:52'::interval + '02:08'::interval; ?column? ------

创建可重新运行的Postgresql DDL脚本

我想为PostgreSQL数据库创建可重新运行的DDL脚本。我已经使用SSMS为SQL server完成了这项工作。SSMS可以为具有“如果不存在”条件的数据库生成DDL语句 我们如何为PostgreSQL做到这一点? 我想为我的一个PostgreSQL数据库生成DDL语句,并想在另一个数据库上运行它,这样我也可以在目标数据库上创建所有表。但是,DDL脚本应该为每个表设置“IF Not EXISTS”,以便在多次运行该脚本时不会出现任何错误 是否有任何工具可以为Postgresql数据库自动创建

Postgresql 从Postgres中的历元列表中获取特定时间段

下表中有Postgres中的历元时间戳。我想在PST中选择时间从20:00到21:00的时间戳。我已经尝试了以下部分,但我似乎无法同时提取小时和分钟 从表中选择时间戳,在“美国/洛杉矶”时区提取('hour'from to_时间戳(创建时间)')>20 |在创建 |1526528788| |1526442388| |1526309188| |1526359588| |1526532388| |1526489188| 预期结果: |在创建 |1526528788| |1526442388| 如果有

无法使用Ansible还原和转储数据库PostgreSQL

代码中出现错误的部分是: - name: import database jira64_20180626.dump.tar.gz postgresql_db: name: jira64_20180626.dump.gz login_user: jira login_password: jira_pwd state: restore target: /var/lib/pgsql/jira64_20180626.dump.tar.gz 错误是: 致命:[

更新行的特定列的PostgreSQL函数

我试图创建一个函数,从表中调用一个特定的数据,但为什么它显示的列即使在数据库中也不存在 CREATE FUNCTION public."updateDB"(IN userid bigint DEFAULT 00000, OUT uinfo json, IN clname text DEFAULT info) RETURNS json LANGUAGE 'plpgsql' AS $BODY$ BEGIN SELECT clname into uinfo FROM public.u

更改为pg_hba.conf和postgresql.conf以使用pgadmin与所有用户连接后,无法启动postgres服务器

这就是我在ubantu机器上安装postgresql时遇到的错误。然后在那台机器上,我可以成功地连接它,但只要我切换到下面的文件,允许所有用户连接它。然后我注意到它不会启动 psql:无法连接到服务器:没有这样的文件或目录 服务器是否在本地运行并接受 Unix域套接字上的连接“/var/run/postgresql/.s.PGSQL.5432” 下面您可以看到postgresql.conf # The default values of these variables are driven fr

Postgresql 如何在gitlab中从内部postgres db迁移到外部postgres db

目前,我们的生产gitlab都在一个docker容器中,使用捆绑的postgres和redis。所以所有的东西都在同一个容器里。我们希望使用外部postgres db和用于redis的单独容器来遵循生产标准 如何从内部postgres db迁移到外部postgres db?如果有人提供的过程和步骤将非常有用。我们对这一进程还不熟悉。如果有人知道,请告诉我们 感谢大家的投入 PRS您可以阅读文章“”,其中包括: 数据库转储/重新加载,使用 注意:YOU也可以使用数据库备份,但前提是外部Pos

Postgresql Postgres日期搜索速度慢于小于vs大于

我正在处理一个奇怪的问题,当使用=vs时,基于日期的查询运行速度要慢得多。正如我对几乎相同的问题所说的,问题是慢速查询中的错误估计 在快速查询中,PostgreSQL显然不会错误地认为条件是非常有选择性的,所以它选择了一个不同的更好的计划。我发现影响结果的是:禁用nest_循环-肯定会加快速度,但我不赞成这样做,因为我不知道还有什么可以打破改变date参数的值使查询更快我尝试了各种索引等等,但都没有成功。我不明白规划者为什么决定走这条路,我也不知道如何更好地教它。我相信如果你去掉这些或的话,事情

Postgresql 我可以为单个pg_还原任务强制使用特定表空间吗?

在我需要独立并行运行多个pg_恢复任务并且需要将其中一些任务导入SSD上的表空间,而将其他任务导入其他标准磁盘上的特定表空间的情况下,是否有一些聪明的方法强制使用特定表空间来执行pg_恢复任务 我们得到了这个用例——每天晚上,我们需要将每天的分区复制到新的仓库数据库中。目前使用的是标准的pg_转储/pg_还原(由于内部策略原因,目前无法进行逻辑复制,尽管这是非常理想的) 更多的pg_还原任务在目标数据库上并行运行,我需要为特定任务设置特定的目标表空间-因此全局“默认_表空间”设置没有帮助。我也无

PostgreSQL-如何将Base64图像字符串插入BYTEA列?

我有以下SQL: CREATE TABLE Documents ( Id INT NOT NULL, UserId INT NOT NULL, Label CHARACTER VARYING(220) NOT NULL, Image BYTEA NOT NULL, PRIMARY Key(Id), FOREIGN KEY (UserId) REFERENCES Users(Id) ); 我想知道,我应该如何将Base64映像插入表中 Base64字符串来自使用Node.

Postgresql 为什么HangFire启动过程因此错误而失败?

我们在启动使用HangFire(1.6.22)和PostgreSQL的进程时看到了这个错误 2019-03-19 00:12:45,406 [1] ERROR Hangfire.PostgreSql.PostgreSqlStorage [(null)] - Error while executing install/upgrade Npgsql.PostgresException (0x80004005): 42701: column "updatecount" of relation "loc

Postgresql 如何访问JSONb的内部表示?

在大数据查询中,文本转换中介是一个性能瓶颈。。。好的二进制信息就在JSONb数据类型中:如何拯救它 典型选择,例如: with t(x,j) as (select 'hello','{"flag1":true,"flag2":false}'::jsonb) SELECT x FROM t WHERE (j->>'flag1')::boolean AND NOT((j->>'flag2')::boolean) 对文本的转换是一个巨大的性能损失。理想是一种直接执行

Postgresql 使用postgres表描述

在postgres中列出与\dt+的关系时,会添加新列“size”和“Description”列。顾名思义,Description可以用来存储表的描述吗?如果可以,如何存储 # \dt List of relations Schema | Name | Type | Owner --------+---------+-------+------- drs | Records | table | rho drs | Reports | table | r

Postgresql Grafana Postgres查询编辑器和pg_prometheus(timescaledb)

我让Prometheus通过Prometheus remote_write功能和。设置工作正常 我已经使用Postgres数据源(启用了timescaledb选项)设置了Grafana,以评估查询编辑器的功能。似乎如果不切换到原始SQL,我无法完成基本的“分组方式”。查询(有效)非常简单,如下所示: SELECT time_bucket('60s',"time") AS time, labels#>>'{hostname}' AS hostname, av

无法在postgresql中创建关系表

我对postgresql有点陌生,所以我在创建表之间的关系等简单事情上遇到了问题 在本练习中,我无法将信息插入到关系表中 我得到的只是空的查询,我有点绝望了 DROP TABLE IF EXISTS Actor CASCADE; CREATE TABLE Actor ( id_actor SERIAL, name VARCHAR, fb_likes INTEGER, PRIMARY KEY(id_actor) ); DROP TABLE IF EXIS

Postgresql 从部署在Heroku中的springboot连接到我的服务器中的Postgres

我在heroku有一个spring boot应用程序,带有heroku自动提供的postgre数据库 我想从我自己的服务器数据库。我已经在application.properties中设置了数据库。但是heroku手动设置了数据库 我已尝试使用cli heroku set数据库\u url,再次分离并连接数据库 heroku addons:create heroku-postgresql:hobby-dev 仍然无法连接它 我如何连接到自己的博士后 2020-02-01T12:38:31.6

Postgresql 如何确定Postgres中每秒写入事务的数量

有没有办法测量Postgres中每秒发生的写事务数?据我所知,pg_stat_数据库。xact_commit将显示提交的事务总数,但我想排除只读查询,只查看实际修改数据的提交数。Run SELECT txid_current(); 获取当前交易编号 如果您在两个时间点执行此操作并减去数字,您就知道平均时间内发生了多少事务(提交或回滚) 只读事务不使用事务ID。您可以获得/tuples/updated(pg_stat_database.tup_updated)的数量,但我不知道有什么方法可以获得

Postgresql Postgres表分区的测试哈希函数

我正在使用Postgres 11,并且希望在主键为UUID的表上使用哈希分区。我知道我需要预先选择多个分区,并且主键上的哈希函数的模将用于为每个分区分配行 大概是这样的: 通过哈希(id)创建新的表\u表(id uuid)分区; 为具有(模数3,余数0)的值创建新表的新表分区; 为具有(模数3,余数1)的值创建新表分区; 为具有(模数3,余数2)的值创建新表分区; 其中提到了“分区键的哈希值”,但没有指定哈希是如何发生的。我想根据现有数据测试这个散列函数,以查看不同数量分区的分布模式。大概是这

Postgresql 关闭trgm索引中的重新检查

我们有一个postgres列,它使用trigrams索引(pg_trgm) 索引工作正常,但速度非常慢:最终的误报复查占用了总查询时间的99%以上(位图索引扫描0.25秒;复查30.7秒) 在我们的例子中,误报是不相关的(罕见+我们不在乎),所以复查是无用的 是否有办法关闭/禁用重新检查步骤,以跳过验证误报?最好的方法是什么?AFAIK您不能禁用重新检查步骤,但您可以尝试在当前会话中通过增加参数work\u mem来减少重新检查的次数。AFAIK您不能禁用重新检查步骤,但您可以通过在中增加参数w

Postgresql 从外部连接到云SQL私有Postgres实例

Postgres实例没有公共IP,正在使用VPC网络。为了实现这一点,我在OSX上使用云sql docker代理,并使用一个启用了云sql管理员角色和云sql API的服务帐户 我可以启动代理并请求与实例的连接: $ Listening on 0.0.0.0:5432 for myproject:northamerica-northeast1:myproject-database-someid $ Ready for new connections $ New connection for "m

通过Unix套接字将DBeaver连接到远程PostgreSQL数据库

我最近安装在Windows PC上,希望从中访问远程Linux服务器上的数据库 我的Linux用户名是我的用户名,我还有一个系统用户psql\u user。我还有两个现有的PostgreSQL数据库,它们与各自的用户同名。通常,只有psql_用户被使用,并且由php fpm池访问,php fpm池监听Unix套接字并作为用户psql_用户运行,因此已将/var/lib/pgsql/12/data/pg_hba.conf配置为: # TYPE DATABASE USER

Postgresql 如何显示多边形的纵横比?

我有一个几何场类型为:几何的表 我想以lat/long显示多边形的值 我怎么做 我看到这个帖子: 但是函数ST_X,ST_Y只对点有效,对多边形无效 如何显示包含lat/long格式多边形的geom字段?根据您想要的输出,很可能已经完成了您想要的所有操作,但除此之外,您可以使用来获取多边形的所有单个点 选择polygon.id, 按路径顺序选择数组集合 从ST_Dumppoints Polygon算起,点就是纬度, 按路径顺序选择数组\u AGGST\u Xgeom 从ST_Dumppoints

Postgresql 加速Postgres中的自动真空

我有一个关于Postgres自动真空/真空设置的问题。 我有一个有45亿行的表,有一段时间有很多更新,导致了15亿个死元组。此时,自动真空需要很长时间(天)才能完成。 在查看pg_stat_progress_真空视图时,我注意到: max_dead_tuples = 178956970 导致多个索引重新扫描(索引真空计数) 根据-max\u dead\u tuples,我们可以在需要执行索引真空循环之前根据维护工作mem存储大量dead tuples。 一个死元组需要6字节的空间。 所以6B

Postgresql psql未从.pgpass文件读取密码

在运行连接到psql服务器的命令时,它会提示输入密码,即使 密码和其他详细信息位于主目录的.pgpass文件中,以及当前的 目录 psql -U postgres -h 127.0.0.1 postgres Password for user postgres: 以下是.pgpass文件的内容: 127.0.0.1:5432:postgres:postgres:rohit我不知道为什么它仍然提示输入密码。 -rw------1 postgres postgres 39 Apr 9 16:5