标签: Postgresql
database-schemaschema-designdatabase-tools
设计PostgreSQL模式的首选方法是什么?您建议使用特定的图形设计工具,还是只在纸上设计模式,然后手工创建所有内容?我使用of创建模式的漂亮图片-但我更愿意手工创建实际在数据库上运行的DDL。您也可以尝试
用于创建ER图
对于管理DDL脚本,我有很好的Liquibase经验,Power Architect也可以直接从ER图创建Liquibase XML。我主要使用纸张或直接在psql提示符中绘制模式
许多UML工具都有DDL生成(参见argouml),但根据我的经验,直接编写模式更快
我非常熟悉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(*)
在我的数据库中,我有642个表。
我必须从中搜索名称中包含EMPSAL的特定表。
但像上面一样,有很多表在名称的开头或结尾或两者之间包含这个关键字
所以我想列出在任何地方都有EMPSAL名称的表
A我对postgresql比较新,所以我不知道如何做到这一点
有什么方法可以帮助我这样做吗
对此有何建议?此查询:
选择表格名称
来自信息\u schema.tables
其中表_schema='public'
和表u type='BASE table'
应该为您提供数据库中所有表的列表。然后,您可以在
鉴于我有“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
我已经查阅了所找到的GRANT文档,我试图看看是否有一个内置函数可以让我查看数据库中的可访问性级别。当然有:
\dp和\dp mytablename
但这并没有显示我的帐户可以访问什么。我想查看我可以访问的所有表。有人能告诉我是否有一个命令可以检查我在Postgres中的访问级别(我是否有SELECT,INSERT,DELETE,UPDATE特权)?如果是这样,那么该命令是什么?您可以在信息架构中查询表\u privileges表:
SELECT table_catalog, table_sch
数据库中有两个表。第一个表具有第二个表的外键
我可以通过外键从第一个表中获取第二个表名吗?可以
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
我正在开发一个Postgres数据库,存储可标记的项目;它为此使用了典型的结构(表用于具有item_id的项,表用于具有tag_id和tag_名称的标记,表用于给定项具有给定标记的每个实例)。我组装了这个查询,它几乎满足了我的要求,检索至少一个与所选标记匹配的项,并显示有关该项的所有信息:
SELECT items.item_id, items.item_name, items.item_description,
ARRAY_AGG(tags.tag_name) AS tag_name_
我正在使用
@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
我正在使用fallowing脚本创建用户
CREATE ROLE readonly LOGIN PASSWORD 'thePwd';
-- Existing objects
GRANT CONNECT ON DATABASE the_db TO readonly;
GRANT USAGE ON SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
GRANT SELECT
我在posgtresql(创建扩展名pg_trgm;)中使用三元字符串比较。但是,当我试图在一个具有三元索引的表中插入一个带有多字节字符的字符串时('您的区域设置是什么?@Renzo ENCODING='UTF8'LC_COLLATE='English_United.1252'LC_CTYPE='English_United.1252'
我有我的PostgreSQL数据库(大约4GB的数据)。它在我的笔记本上运行良好(linux、2核心CPU、SSD、8GB RAM)。我正在尝试使用docker hub移动它以释放AWS EC2 t2.micro
在容器启动时,会执行一些脚本,这些脚本设置模式和表的结构,并使用pg_restore(自定义压缩格式)用数据填充它。在我的笔记本上大约需要20分钟。但在t2.micro上,它看起来可能需要几个小时或几天的时间(10小时后集群中有2.4GB)
问题是,为什么它这么慢,而进程(postgr
我不知道这是一个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
这是我的模型
用户:
@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新手,我想连接到PostgreSQL服务器。因此,我打开了SAP HANA STUDIO,然后单击“添加系统”,并给出了PostgreSQL数据库的主机名、用户名和密码。但它不起作用
这样,我们只能连接到SAP HANA系统吗?如果是这样,如何连接到PostgreSQL并访问STUDIO中的数据?提前感谢。SAP HANA STUDIO仅与SAP HANA一起工作,而不与其他DBMS一起工作。由于HANA STUDIO本质上是一个带有一些SAP插件的Eclipse,我想应该有
我需要将角色从一个postgresql数据库克隆到另一个数据库。是否可以以某种方式提取角色密码哈希并在另一个数据库中设置它?我希望避免任何明确的密码操作…如果PostgreSQL认为您正在使用MD5哈希设置密码,它会直接存储它。从
如果提供的密码字符串已采用MD5加密格式,则无论指定了加密还是未加密,都会按原样加密存储,因为系统无法解密指定的加密密码字符串。这允许在转储/恢复期间重新加载加密密码
您可以从pg_shadow中选择密码,并按照Eavn所告诉的文档使用它。或者您可以使用pg_dump
我有一个位置数组,我想将它们作为多边形列插入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
openstreetmappostgisosm2pgsqlosmfilter
我正在创建一个postgis数据库,希望使用过滤后的OpenStreetMap数据
为此,我尝试了以下过程:
从下载了planet.osm.bz2文件
使用bzip2解包到*.osm
通过命令提示符使用osmfilter筛选文件
在命令提示符下使用osm2pgsql将筛选后的*.osm文件上载到我的数据库
对于我的第一次尝试,我只过滤了陆地面积
但是,在使用osm2pgsql的步骤4中,我在命令提示符中收到以下错误:“osm2pgsql由于错误而失败:第3137102行第61列的XML解析错误:
我有一个Postgresql表,它有一个数据类型为JSONB的列
如何通过JDBC向Postgresql表插入DataFrame
如果我有一个UDF将body列转换为JSONBPostgresql数据类型,我应该使用什么对应的数据类型
带有JSONB列的Postgresql表:
CREATE TABLE dummy (
id bigint,
body JSONB
);
创建表虚拟(
id bigint,
身体JSONB
);
谢谢 结果是,如果我将“stringtype”:“unspec
我有客户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,如下所示:
'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脚本。我已经使用SSMS为SQL server完成了这项工作。SSMS可以为具有“如果不存在”条件的数据库生成DDL语句
我们如何为PostgreSQL做到这一点?
我想为我的一个PostgreSQL数据库生成DDL语句,并想在另一个数据库上运行它,这样我也可以在目标数据库上创建所有表。但是,DDL脚本应该为每个表设置“IF Not EXISTS”,以便在多次运行该脚本时不会出现任何错误
是否有任何工具可以为Postgresql数据库自动创建
下表中有Postgres中的历元时间戳。我想在PST中选择时间从20:00到21:00的时间戳。我已经尝试了以下部分,但我似乎无法同时提取小时和分钟
从表中选择时间戳,在“美国/洛杉矶”时区提取('hour'from to_时间戳(创建时间)')>20
|在创建
|1526528788|
|1526442388|
|1526309188|
|1526359588|
|1526532388|
|1526489188|
预期结果:
|在创建
|1526528788|
|1526442388|
如果有
代码中出现错误的部分是:
- 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
错误是:
致命:[
我试图创建一个函数,从表中调用一个特定的数据,但为什么它显示的列即使在数据库中也不存在
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
这就是我在ubantu机器上安装postgresql时遇到的错误。然后在那台机器上,我可以成功地连接它,但只要我切换到下面的文件,允许所有用户连接它。然后我注意到它不会启动
psql:无法连接到服务器:没有这样的文件或目录
服务器是否在本地运行并接受
Unix域套接字上的连接“/var/run/postgresql/.s.PGSQL.5432”
下面您可以看到postgresql.conf
# The default values of these variables are driven fr
目前,我们的生产gitlab都在一个docker容器中,使用捆绑的postgres和redis。所以所有的东西都在同一个容器里。我们希望使用外部postgres db和用于redis的单独容器来遵循生产标准
如何从内部postgres db迁移到外部postgres db?如果有人提供的过程和步骤将非常有用。我们对这一进程还不熟悉。如果有人知道,请告诉我们
感谢大家的投入
PRS您可以阅读文章“”,其中包括:
数据库转储/重新加载,使用
注意:YOU也可以使用数据库备份,但前提是外部Pos
我正在处理一个奇怪的问题,当使用=vs时,基于日期的查询运行速度要慢得多。正如我对几乎相同的问题所说的,问题是慢速查询中的错误估计
在快速查询中,PostgreSQL显然不会错误地认为条件是非常有选择性的,所以它选择了一个不同的更好的计划。我发现影响结果的是:禁用nest_循环-肯定会加快速度,但我不赞成这样做,因为我不知道还有什么可以打破改变date参数的值使查询更快我尝试了各种索引等等,但都没有成功。我不明白规划者为什么决定走这条路,我也不知道如何更好地教它。我相信如果你去掉这些或的话,事情
在我需要独立并行运行多个pg_恢复任务并且需要将其中一些任务导入SSD上的表空间,而将其他任务导入其他标准磁盘上的特定表空间的情况下,是否有一些聪明的方法强制使用特定表空间来执行pg_恢复任务
我们得到了这个用例——每天晚上,我们需要将每天的分区复制到新的仓库数据库中。目前使用的是标准的pg_转储/pg_还原(由于内部策略原因,目前无法进行逻辑复制,尽管这是非常理想的)
更多的pg_还原任务在目标数据库上并行运行,我需要为特定任务设置特定的目标表空间-因此全局“默认_表空间”设置没有帮助。我也无
我有以下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.
我们在启动使用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
在大数据查询中,文本转换中介是一个性能瓶颈。。。好的二进制信息就在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)
对文本的转换是一个巨大的性能损失。理想是一种直接执行
在postgres中列出与\dt+的关系时,会添加新列“size”和“Description”列。顾名思义,Description可以用来存储表的描述吗?如果可以,如何存储
# \dt
List of relations
Schema | Name | Type | Owner
--------+---------+-------+-------
drs | Records | table | rho
drs | Reports | table | r
我让Prometheus通过Prometheus remote_write功能和。设置工作正常
我已经使用Postgres数据源(启用了timescaledb选项)设置了Grafana,以评估查询编辑器的功能。似乎如果不切换到原始SQL,我无法完成基本的“分组方式”。查询(有效)非常简单,如下所示:
SELECT time_bucket('60s',"time") AS time,
labels#>>'{hostname}' AS hostname,
av
我对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过程,下面是我的代码
CREATE OR REPLACE FUNCTION public.title_last_procedure()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
if (TG_OP = 'INSERT') then
update
"Titles"
set "entryCount" = "entryCount" + 1,
我在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
有没有办法测量Postgres中每秒发生的写事务数?据我所知,pg_stat_数据库。xact_commit将显示提交的事务总数,但我想排除只读查询,只查看实际修改数据的提交数。Run
SELECT txid_current();
获取当前交易编号
如果您在两个时间点执行此操作并减去数字,您就知道平均时间内发生了多少事务(提交或回滚)
只读事务不使用事务ID。您可以获得/tuples/updated(pg_stat_database.tup_updated)的数量,但我不知道有什么方法可以获得
我正在使用Postgres 11,并且希望在主键为UUID的表上使用哈希分区。我知道我需要预先选择多个分区,并且主键上的哈希函数的模将用于为每个分区分配行
大概是这样的:
通过哈希(id)创建新的表\u表(id uuid)分区;
为具有(模数3,余数0)的值创建新表的新表分区;
为具有(模数3,余数1)的值创建新表分区;
为具有(模数3,余数2)的值创建新表分区;
其中提到了“分区键的哈希值”,但没有指定哈希是如何发生的。我想根据现有数据测试这个散列函数,以查看不同数量分区的分布模式。大概是这
我们有一个postgres列,它使用trigrams索引(pg_trgm)
索引工作正常,但速度非常慢:最终的误报复查占用了总查询时间的99%以上(位图索引扫描0.25秒;复查30.7秒)
在我们的例子中,误报是不相关的(罕见+我们不在乎),所以复查是无用的
是否有办法关闭/禁用重新检查步骤,以跳过验证误报?最好的方法是什么?AFAIK您不能禁用重新检查步骤,但您可以尝试在当前会话中通过增加参数work\u mem来减少重新检查的次数。AFAIK您不能禁用重新检查步骤,但您可以通过在中增加参数w
使用docker compose,我开发了一个包含Postgresql数据库的网站。我使用相同的docker compose.yml文件在服务器上部署了它,但我发现我可以使用psql远程访问我的postgres服务器
我目前在docker compose中有这些行
version: '3.6'
services:
db:
image: postgres
ports:
- 5432:5432
environment:
POSTGRES_DB:
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
我最近安装在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
有人能解释一下为什么在给出的示例中定义了两个索引机制(btree和gist)(请查看F.21.4.示例部分)
以下是示例代码:
CREATE TABLE test (path ltree);
INSERT INTO test VALUES ('Top');
INSERT INTO test VALUES ('Top.Science');
INSERT INTO test VALUES ('Top.Science.Astronomy');
INSERT INTO test VALUES ('To
我有一个几何场类型为:几何的表
我想以lat/long显示多边形的值
我怎么做
我看到这个帖子:
但是函数ST_X,ST_Y只对点有效,对多边形无效
如何显示包含lat/long格式多边形的geom字段?根据您想要的输出,很可能已经完成了您想要的所有操作,但除此之外,您可以使用来获取多边形的所有单个点
选择polygon.id,
按路径顺序选择数组集合
从ST_Dumppoints Polygon算起,点就是纬度,
按路径顺序选择数组\u AGGST\u Xgeom
从ST_Dumppoints
我有以下程序
CREATE OR REPLACE FUNCTION createtestdata(
)
RETURNS boolean
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
DECLARE
proj RECORD;
ruleid integer;
emailtemplateid integer;
otherTemplates
数据库:Postgres
我有一个产品(id、title、source等)表,其中包含近500K条记录。
数据的一个例子是:
| Id | title | source |
|:---|---------:|:--------:|
| 1 | product1 | source1 |
| 2 | product2 | source1 |
| 3 | product3 | source1 |
| 4 | product4 | source1 |
| . | ......
我有一个关于Postgres自动真空/真空设置的问题。
我有一个有45亿行的表,有一段时间有很多更新,导致了15亿个死元组。此时,自动真空需要很长时间(天)才能完成。
在查看pg_stat_progress_真空视图时,我注意到:
max_dead_tuples = 178956970
导致多个索引重新扫描(索引真空计数)
根据-max\u dead\u tuples,我们可以在需要执行索引真空循环之前根据维护工作mem存储大量dead tuples。
一个死元组需要6字节的空间。
所以6B
在运行连接到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
我想插入用户名、密码和角色。但当我执行函数时,不会执行role属性
这是我的迁移文件:
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
username: {
我正在尝试创建一个过程,其中我已将参数值存储在postgres.auto.conf文件中,但无法解决语法错误:
CREATE OR REPLACE PROCEDURE testproc.test_mans_clr ( in_usercode text, in_usersess text, in_compcode text, out_code INOUT numeric ) AS $body$
BEGIN
PERFORM test_delete_table(in_usercode, '