我是数据库管理的新手,我们正在使用 PostgreSQL。我需要做的就是将 CSV 文件(对应大约 200 个表)迁移到我们的数据库。为每个 CSV 文件手动创建表格有点烦人,所以请帮帮我。有什么办法不仅可以导入数据,还可以从CSV文件生成表格吗?
我自己有一个相当复杂的问题,我希望有人可以帮助我。
我想使用 PostgreSQL 来从无几何表创建数据透视表。
为了简单起见,我将只显示我想要用于枢轴的表结构,然后使用给出的方法来创建其他表结构,我希望:)
我想使用的字段是postcode_nospace_, 和ageband。
ageband顶部的列是行,postcode_nospace_每个邮政编码的计数是数据。
有 2132 条记录,其中一些记录有多个邮政编码,因此计数。
CREATE TABLE adult_social_care.activities_in_localities_asc
(
ogc_fid integer NOT NULL,
sort numeric(5,0),
ageband character(12),
postcode_nospace_ character(8),
wkb_geometry geometry,
CONSTRAINT activities_in_localities_asc_pkey PRIMARY KEY (ogc_fid)
);
Run Code Online (Sandbox Code Playgroud)
更新:
这是我想要实现的结果,如具有相同数据的 Excel 数据透视表所示。
postcode 18_24 25_34 35_44 45_54 55_64 65_74 Total Count
----------------------------------------------------------------------------
BB115DE 1 2 2 3 8
FY38LZ 1 1 2
Run Code Online (Sandbox Code Playgroud)
通过环顾四周,我编译了以下 SQL 查询。它按邮政编码分组并创建所需的字段名称。但是这些字段是空白的。理想情况下,我还希望total_count在表格末尾有一列。
SELECT * FROM crosstab(
'SELECT postcode_nospace_, ageband, count(ageband) as total_count
FROM …Run Code Online (Sandbox Code Playgroud) 我想设置 PostgreSQL 流复制,但出现以下错误:
FATAL: could not receive data from WAL stream:
ERROR: requested WAL segment 00000001000000000000006A has already been removed.
Run Code Online (Sandbox Code Playgroud)
主控IP:192.168.0.30
从机IP:192.168.0.36
关于大师:
我创建了一个rep仅用于复制的用户。
Postgres config 目录( )内的相关文件/opt/Postgres/9.3/data:
pg_hba.conf:
host replication rep 192.168.0.36/32 trust
Run Code Online (Sandbox Code Playgroud)
postgresql.conf:
listen_addresses = 'localhost,192.168.0.30'
wal_level = 'hot_standby'
archive_mode = on
archive_command = 'cd .'
max_wal_senders = 1
hot_standby = on
Run Code Online (Sandbox Code Playgroud)
我已经重新启动了该postgres服务。
在从机上:
我已停止该postgres服务,然后将更改应用于两个文件:
pg_hba.conf:
host replication rep 192.168.0.30/32 trust
Run Code Online (Sandbox Code Playgroud)
postgresql.conf:
listen_addresses = 'localhost,192.168.0.36'
wal_level …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,其中有几台设备每秒向我的服务器发送数据。在数据库上,我有一个包含设备的表和另一个每秒发送数据的表。
设备第一次发送数据时,服务器脚本应INSERT在设备表中注册 ( ) 该设备 ID 并将数据添加到数据表中。
我的问题是,什么会更快?
执行SELECT EXISTS查询以确定INSERT设备表中是否需要一个。如果SELECT EXISTS返回 false 则执行 an INSERT,否则什么都不做。
总是执行一个INSERT语句。考虑到设备 id 是表上的主键,如果设备已经存在它会返回一个错误,否则它会插入它。
只有第一次设备发送数据时才需要一个实际的INSERT,之后INSERT就不需要了。
PostgreSQL 版本是 9.4。
设备表定义如下:
CREATE TABLE common.tag
(
customer integer,
hostname character varying(150),
description text,
model integer,
configprofile integer,
id character varying(150) NOT NULL,
host integer,
CONSTRAINT tag_pk PRIMARY KEY (id),
CONSTRAINT tag_fk_client FOREIGN KEY (customer)
REFERENCES common.customer (id) MATCH SIMPLE
ON UPDATE NO ACTION ON …Run Code Online (Sandbox Code Playgroud) 由于历史原因,我们过去常常在 Postgresql 数据库中使用一个非常大的表来存储基于时间的一系列测量值。经过长时间的使用,当表的大小达到 200+ GB 时,我们决定对其进行一些清理,比如只保留 90 天的数据,以加快速度并节省一些磁盘空间。
问题是,这样做delete from ... where clock_column < ...不会回收磁盘上的任何空间,因此我们需要VACUUM FULL在删除后保留它们。
由于我们无法承受如此长的时间停止数据库,因此我们决定采用分区方法并创建每日表,以便我们能够在时间到期时将它们一一删除。所以现在我们有了table(最初的、巨大的),并以 date 命名table160101,table160102等等。
现在我想做:
初始表的备份(仅初始表)
2.1 在其中进行一些清理(仅在其中)或
2.2 也许简单地截断它(仅它)
但当我进行测试时,我看到COPY table TO 'file'创建了整个表的转储(两者和table全部等)。同样的方式,清除整个表,而不是第一个表(在测试服务器上测试)。table160101table160102TRUNCATE
当我在 中使用分区表时SELECT,我可以简单地说明ONLY选择要使用的表。但我找不到在COPYor中做到这一点的方法TRUNCATE。
所以问题是:如何在不牺牲表中数据的情况下归档我的目标?
PS 我需要归档的是,当所有“每日”数据都在“每日”表中时,我只是不喜欢保留带有非常旧数据的初始大表。事实上,TRUNCATE唯一的想法就是好主意。
最初,我们在默认的“公共”架构中安装了所有扩展。现在我们有越来越多的其他模式 - 因此我们希望向模式添加扩展和通用功能common。
不幸的是,AWS RDS 在尝试像这样移动现有的时会报告:
ALTER EXTENSION "hstore" set schema common;
DBCException: SQL Error [42501]: ERROR: must be owner of extension hstore
org.postgresql.util.PSQLException: PSQLException: ERROR: must be owner of extension hstore
Run Code Online (Sandbox Code Playgroud)
我正在使用也是角色成员的默认用户rds_superuser。
我正在copy从函数执行命令
execute 'copy (select * from tableName) to ''/tmp/result.txt'''
Run Code Online (Sandbox Code Playgroud)
它工作正常。但是,tableName是动态的,将有更多的表(循环迭代)。result.txt只有最后一次迭代(表)数据。
如果必须的话,我可以通过命令行使用\o或>>附加到文件中。但是,我必须使用该功能。
我读了http://shuber.io/reading-from-the-filesystem-with-postgres/。它建议使用临时表的解决方案。我可以做类似的事情,但没有临时表吗?(我必须避免归档日志)。创建临时表会创建存档日志吗?
有没有办法copy在函数中附加命令?
多年来我注意到的一种常见模式是,人们倾向于随着数据大小的增加而不断增加工作内存,因此更复杂的查询仍然可以充分利用内存速度,但对于某些极端任务(例如,报告)。
仅对一些很少运行的异常查询大幅增加该数字可能是有利的。例如,我可能想保持work_mem在例如。8 MB 用于正常操作,然后使用具有 250 MB 工作内存之类的特定客户端/用户运行特定查询,以便我可以在单个会话期间完全在内存中快速执行重大操作。
这可能吗?我是否完全不考虑将其视为解决方案?
在什么情况下 Oracle 高级排队是实现功能需求的首选机制?例如,从银行账户 A 到银行账户 B 的汇款在理论上可能被认为是两种不同的操作,并且可以分别实现——首先,将来自账户 A 的汇款入队(更新),然后将资金转移到账户 B(更新) . 但是,很明显它不能那样做,因为这两个操作应该在一个一致的操作中完成 - 在事务中。
也许只有在开发执行一些内部(通过执行 DML 操作和调用其他本地存储的 proc/fnc)和外部(通过调用一些 web 服务)的逻辑的存储过程/函数时才应该考虑高级排队。当使用这种对 webservices 的调用时,我们不能把它全部包装成一致的事务,所以唯一的方法是使用一些排队机制......
任何现实生活中的详细示例将不胜感激。
我好奇的不是技术本身的细节,而是使用这种消息传递的真实案例是什么,因为我以前没有这样做过。比如,为什么我需要传递一些数据(消息有效负载)?
我在 SQL Server 2012 上有一个包含 15 个数据库的实例。我将设置备份系统,该系统每晚都可以工作。我只想备份模式,因为有几个数据库非常大。我还没有找到解决这个问题的任何方法。
如何仅备份带有作业的架构?
postgresql ×8
amazon-rds ×1
backup ×1
copy ×1
csv ×1
insert ×1
jobs ×1
memory ×1
migration ×1
oracle ×1
partitioning ×1
pivot ×1
replication ×1
schema ×1
select ×1
sql-server ×1