#include "replication/logicalworker.h"
#include "replication/worker_internal.h"
#include "utils/acl.h"
+#include "utils/builtins.h"
#include "utils/fmgroids.h"
#include "utils/guc.h"
#include "utils/inval.h"
for (int idx = cur_batch_base_index; idx < n_seqinfos; idx++)
{
+ char *nspname_literal;
+ char *seqname_literal;
+
LogicalRepSequenceInfo *seqinfo =
(LogicalRepSequenceInfo *) list_nth(seqinfos, idx);
if (seqstr->len > 0)
appendStringInfoString(seqstr, ", ");
- appendStringInfo(seqstr, "(\'%s\', \'%s\', %d)",
- seqinfo->nspname, seqinfo->seqname, idx);
+ nspname_literal = quote_literal_cstr(seqinfo->nspname);
+ seqname_literal = quote_literal_cstr(seqinfo->seqname);
+
+ appendStringInfo(seqstr, "(%s, %s, %d)",
+ nspname_literal, seqname_literal, idx);
if (++batch_size == MAX_SEQUENCES_SYNC_PER_BATCH)
break;
my $ddl = qq(
CREATE TABLE regress_seq_test (v BIGINT);
CREATE SEQUENCE regress_s1;
+ CREATE SEQUENCE "regress'quote";
);
$node_publisher->safe_psql('postgres', $ddl);
CREATE SEQUENCE regress_s1;
CREATE SEQUENCE regress_s2;
CREATE SEQUENCE regress_s3;
+ CREATE SEQUENCE "regress'quote";
);
$node_subscriber->safe_psql('postgres', $ddl);
'postgres', qq(
-- generate a number of values using the sequence
INSERT INTO regress_seq_test SELECT nextval('regress_s1') FROM generate_series(1,100);
+ INSERT INTO regress_seq_test SELECT nextval('"regress''quote"') FROM generate_series(1,100);
));
# Setup logical replication pub/sub
));
is($result, '100|t', 'initial test data replicated');
+$result = $node_subscriber->safe_psql(
+ 'postgres', qq(
+ SELECT last_value, is_called FROM "regress'quote";
+));
+is($result, '100|t',
+ 'initial test data replicated for sequence name having quotes');
+
##########
## ALTER SUBSCRIPTION ... REFRESH PUBLICATION should cause sync of new
# sequences of the publisher, but changes to existing sequences should
# Verify that an error is logged for parameter differences on sequence
# ('regress_s4').
$node_subscriber->wait_for_log(
- qr/WARNING: ( [A-Z0-9]+:)? mismatched or renamed sequence on subscriber \("public.regress_s4"\)\n.*ERROR: ( [A-Z0-9]+:)? logical replication sequence synchronization failed for subscription "regress_seq_sub"/,
+ qr/WARNING: ( [A-Z0-9]+:)? mismatched or renamed sequence on subscriber \("public.regress_s4"\)/,
$log_offset);
# Verify that an error is logged for the missing sequence ('regress_s4').
$node_publisher->safe_psql('postgres', qq(DROP SEQUENCE regress_s4;));
$node_subscriber->wait_for_log(
- qr/WARNING: ( [A-Z0-9]+:)? missing sequence on publisher \("public.regress_s4"\)\n.*ERROR: ( [A-Z0-9]+:)? logical replication sequence synchronization failed for subscription "regress_seq_sub"/,
+ qr/WARNING: ( [A-Z0-9]+:)? missing sequence on publisher \("public.regress_s4"\)/,
$log_offset);
done_testing();