错误信息与使用 COPY 的超级用户相同。这些文件与 postgres 服务器位于同一台服务器上。看到很多类似的帖子,但没有一个回答我的问题。
\copy table_name from '/path/to/csv/file.csv'
with format csv, header true ;
ERROR: syntax error at or near "format"
Run Code Online (Sandbox Code Playgroud)
是否带括号。仔细阅读postgres版本 10的手册。没有帮助。我一定遗漏了一些小问题,请指出。
以下是同一事物的两种不同语法。
带有COPY TABLE AS SELECT( CTAS)。
CREATE TABLE main
AS
SELECT *
FROM other;
Run Code Online (Sandbox Code Playgroud)作为单独的语句CREATE TABLE和INSERT INTO
CREATE TABLE main (like other);
INSERT INTO main
SELECT *
FROM other;
Run Code Online (Sandbox Code Playgroud)我观察到的CTAS比明显快CREATE TABLE.. INSERT。第一个需要 20 秒才能完成执行。第二个语法二需要 1 分 15 秒才能完成执行。
差异的原因可能是什么?
我的数据库(Postgresql 10)具有以下架构:
CREATE TABLE "PulledTexts" (
"Id" serial PRIMARY KEY,
"BaseText" TEXT,
"CleanText" TEXT
);
CREATE TABLE "UniqueWords" (
"Id" serial PRIMARY KEY,
"WordText" TEXT
);
CREATE TABLE "WordTexts" (
"Id" serial PRIMARY KEY,
"TextIdId" INTEGER REFERENCES "PulledTexts",
"WordIdId" INTEGER REFERENCES "UniqueWords"
);
CREATE INDEX "IX_WordTexts_TextIdId" ON "WordTexts" ("TextIdId");
CREATE INDEX "IX_WordTexts_WordIdId" ON "WordTexts" ("WordIdId");
Run Code Online (Sandbox Code Playgroud)
一些示例数据:
INSERT INTO public."PulledTexts" ("Id", "BaseText", "CleanText") VALUES
(1, 'automate business audit', null),
(2, 'audit trial', null),
(3, 'trial', null),
(4, 'audit', null),
(5, 'fresh …Run Code Online (Sandbox Code Playgroud) postgresql performance subquery relational-division postgresql-performance
为了更快地进行更新,我正在使用:
ALTER TABLE imagingresourceplanning.opnav_fact_revenue_costs SET UNLOGGED ;
Run Code Online (Sandbox Code Playgroud)
这个命令的缺点是什么?
如果系统在更新期间崩溃会发生什么?表中的所有数据都被删除了吗?或者只有正在进行的更新会丢失?
在 SQL Server 上是否有与 PostgreSQL 的Dollar-quoted String Constants等价的东西?
我想输入可能包含单引号或双引号的 HTML 字符串文字。
例子:
UPDATE table_name
SET column_name = $$
Here's a string that contains "double quotes".
$$
WHERE condition = true
Run Code Online (Sandbox Code Playgroud)
编辑:
我问这个的原因是因为我想更新一些存储在数据库中的相当大的 HTML“Web 部件”(糟糕!)。因为在工作中我们使用那种 CMS(我不会给你它的名字)。所以我不想每次都逃避我的单引号。这就是为什么我要问这种功能的原因。如果我理解正确,QUOTENAME仍然需要我将单引号加倍。
我们最近将一个 Amazon RDS 实例从 PostgreSQL 9.3 升级到 9.4。升级过程中没有出现问题,之后我们就跑了VACUUM ANALYZE。性能现在非常缓慢。下面是一个在 9.3 中花费几分之一秒的查询示例:
EXPLAIN ANALYZE SELECT room_name, id FROM common_activityinstance WHERE started_by_id = 1370408 AND room_name IN ('robcv28', 'foobartest', 'noroster', 'jscode', 'cv28', 'johansencouple', 'lv426', 'johansenfamily', 'johansen') AND end_time IS NULL;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Bitmap Heap Scan on common_activityinstance (cost=55.63..59.65 rows=1 width=13) (actual time=1.082..1.082 rows=0 loops=1)
Recheck Cond: ((started_by_id = 1370408) AND (room_name = ANY ('{robcv28,foobartest,noroster,jscode,cv28,johansencouple,lv426,johansenfamily,johansen}'::text[])))
Filter: (end_time IS NULL)
Rows Removed by Filter: 925
-> BitmapAnd (cost=55.63..55.63 rows=1 width=0) (actual …Run Code Online (Sandbox Code Playgroud) postgresql performance upgrade postgresql-9.3 postgresql-9.4 postgresql-performance
我一直在挠头解决以下错误,但没有取得太大进展:
$ barman switch-wal --force --archive --archive-timeout 180 pg
The WAL file 0000000100000059000000FF has been closed on server 'pg'
Waiting for the WAL file 0000000100000059000000FF from server 'pg' (max: 180 seconds)
ERROR: The WAL file 0000000100000059000000FF has not been received in 180 seconds
Run Code Online (Sandbox Code Playgroud)
我之前在一次性 VPS 上配置了酒保,一切正常。但是当我尝试在我们最终的 EC2 实例上复制它时,我遇到了上面提到的问题。我确保了以下内容(即使我不记得在 VPS 上这样做过):
这里可能是什么问题?
编辑:添加输出barman check pg
Server pg:
2017-12-08 05:56:31,841 [14559] barman.server ERROR: Check 'WAL archive' failed …Run Code Online (Sandbox Code Playgroud) 提前很多道歉,但我自己无法找到:
活元组和插入 postgres 统计的元组有什么区别?
有这个帖子,但它没有回答这个问题:pg_stat_get_live_tuples是Representing the number of live [...] rows (tuples) in the table.但什么是“活”?
Postgres文档也不提供答案:
pg_stat_get_live_tuples(oid) Number of live rows in table pg_stat_get_tuples_inserted(oid) Number of rows inserted into table 为什么我的统计数据显示 213,324,422 个插入的元组,但只有 124,510,280 个活动元组?(3,087,919 个死元组)
PG Admin文档对此也不清楚。它还说Tuples Inserted displays the number of tuples inserted into the database within the last week.
我想知道我的数据库中现有条目的总数。这是活动行还是插入行?
我(key, value)将成对存储在两个不同的表中 -company_settings和branch_settings. Akey可以不存在于表中,也可以存在于其中一个或两个表中。
如果key两个表中都存在,我想使用value存储在branch_settings表中的。否则,如果可用,我想回退到value存储在company_settings表中。
company_settings
-------------------------
| key | value
-------------------------
| key.A | 4 |
-------------------------
| key.B | 5 |
-------------------------
branch_settings
-------------------------
| key | value
-------------------------
| key.A | 1 |
-------------------------
Run Code Online (Sandbox Code Playgroud)
因此,如果我查询key.A结果应该是1因为key.A两个表中都存在,并且我想为branch_settings表中的记录提供更高的优先级。
如果我查询key.B结果应该是5因为key.B只存在于company_settings表中。
我们有一个简单的语法,允许我们查看单个标量的数组,
SELECT 'foo' = ANY(ARRAY['foo', 'bar', 'baz']);
Run Code Online (Sandbox Code Playgroud)
我们可以用同样的方法来匹配 LIKE
SELECT 'foobar' LIKE ANY(ARRAY['foo%', 'bar%', 'baz%'];
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果你想做另一个。
SELECT ANY(ARRAY['foobar', 'barbar', 'bazbar']) LIKE 'foo%'
ERROR: syntax error at or near "ANY"
LINE 1: SELECT ANY(ARRAY['foobar', 'barbar', 'bazbar']) LIKE 'foo%';
Run Code Online (Sandbox Code Playgroud)
我知道语法不起作用,但我希望它起作用。
# SELECT ARRAY['foobar', 'barbar', 'bazbar'] LIKE 'foo%';
ERROR: operator does not exist: text[] ~~ unknown
LINE 1: SELECT ARRAY['foobar', 'barbar', 'bazbar'] LIKE 'foo%';
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)
我想过滤一个数组以查看元素是否存在。这可能不使用 …
postgresql ×10
performance ×2
array ×1
backup ×1
barman ×1
bulk-insert ×1
client ×1
copy ×1
ctas ×1
insert ×1
like ×1
operator ×1
pgadmin ×1
psql ×1
sql-server ×1
string ×1
subquery ×1
upgrade ×1