Add COPY command support, thanks for Andrew Bille for test patch
authorTeodor Sigaev <teodor@sigaev.ru>
Thu, 11 Jul 2024 10:50:42 +0000 (13:50 +0300)
committerTeodor Sigaev <teodor@sigaev.ru>
Thu, 11 Jul 2024 10:50:42 +0000 (13:50 +0300)
expected/online_analyze.out
online_analyze.c
sql/online_analyze.sql

index ddc7bcb..a47858f 100644 (file)
@@ -44,4 +44,29 @@ SHOW online_analyze.exclude_tables;
  
 (1 row)
 
+SET "online_analyze.verbose" = off;
+CREATE TABLE insert_tbl(
+        foo int,
+        bar text
+);
+CREATE TABLE copy_tbl(
+        foo int,
+        bar text
+);
+INSERT INTO insert_tbl VALUES (1,'a');
+COPY copy_tbl (foo, bar) FROM stdin;
+SELECT * FROM copy_tbl;
+ foo | bar 
+-----+-----
+   1 | a
+(1 row)
+
+-- Both must be true
+SELECT last_analyze IS NOT NULL AS analyzed, relname FROM pg_stat_user_tables ORDER BY relname;
+ analyzed |  relname   
+----------+------------
+ t        | copy_tbl
+ t        | insert_tbl
+(2 rows)
+
 SET online_analyze.enable = off;
index 0021fc3..b9aae90 100644 (file)
@@ -1048,6 +1048,11 @@ onlineAnalyzeHookerUtility(
                        }
                        else
                                tblnames = NIL;
+               } else if (IsA(parsetree, CopyStmt)) {
+                       CopyStmt   *cpystmt = (CopyStmt*) parsetree;
+
+                       tblnames = list_make1((RangeVar*)copyObject(cpystmt->relation));
+                       op = CK_CREATE;
                }
        }
 
index 760eaca..0ef8f86 100644 (file)
@@ -18,4 +18,22 @@ SHOW online_analyze.exclude_tables;
 DROP TABLE oa_tbl;
 SHOW online_analyze.exclude_tables;
 
+SET "online_analyze.verbose" = off;
+
+CREATE TABLE insert_tbl(
+        foo int,
+        bar text
+);
+CREATE TABLE copy_tbl(
+        foo int,
+        bar text
+);
+INSERT INTO insert_tbl VALUES (1,'a');
+COPY copy_tbl (foo, bar) FROM stdin;
+1      a
+\.
+SELECT * FROM copy_tbl;
+-- Both must be true
+SELECT last_analyze IS NOT NULL AS analyzed, relname FROM pg_stat_user_tables ORDER BY relname;
+
 SET online_analyze.enable = off;