diff --git a/.github/workflows/misc-migtests.yml b/.github/workflows/misc-migtests.yml index 81140bd103..fc939c42af 100644 --- a/.github/workflows/misc-migtests.yml +++ b/.github/workflows/misc-migtests.yml @@ -49,11 +49,12 @@ jobs: docker restart ${{ job.services.postgres.id }} sleep 10 - - name: Install python3 and psycopg2 + - name: Install python3, psycopg2 and bs4 run: | sudo apt install -y python3 sudo apt install -y libpq-dev sudo apt install python3-psycopg2 + pip3 install bs4 # Install BeautifulSoup4 module for HTML report validation #TODO Remove the install PG 17 command once we do that in installer script - name: Run installer script to setup voyager diff --git a/migtests/scripts/compare-html-reports.py b/migtests/scripts/compare-html-reports.py new file mode 100755 index 0000000000..fabeb1b57d --- /dev/null +++ b/migtests/scripts/compare-html-reports.py @@ -0,0 +1,233 @@ +#!/usr/bin/env python3 + +import argparse +import re +from bs4 import BeautifulSoup +import difflib +import sys +from collections import Counter + +def normalize_text(text): + """Normalize and clean up text content.""" + text = text.replace('\xa0', ' ') # Replace non-breaking spaces with regular spaces + text = text.replace('\u200B', '') # Remove zero-width spaces + text = re.sub(r'\s+', ' ', text) # Collapse any whitespace sequences + return text.strip() # Remove leading/trailing spaces + +def extract_and_normalize_texts(elements): + """Extract and normalize inner text from HTML elements.""" + return [normalize_text(el.get_text(separator=" ")) for el in elements] + +def extract_divs(soup): + """Extract and normalize divs, optionally sorting them based on certain conditions.""" + all_divs = soup.find_all("div") + filtered_divs = [] + should_sort = False + + for div in all_divs: + # Sorting the content within "Sharding Recommendations" since the tables can be in different order + prev_h2 = div.find_previous("h2") + if prev_h2 and "Sharding Recommendations" in prev_h2.get_text(): + should_sort = True + else: + should_sort = False # Reset should_sort for each div + + # Skipping the parent wrapper div since it causes issues to be reported twice + if "wrapper" not in div.get("class", []): # Exclude wrapper divs + div_text = normalize_text(div.get_text(separator=" ")).strip() + if should_sort: + div_text = " ".join(sorted(div_text.split())) # Sort content within div + filtered_divs.append(div_text) + + return sorted(filtered_divs) if any(s for s in filtered_divs) else filtered_divs + + +def extract_paragraphs(soup): + """Extract and filter paragraphs, skipping specific ones based on conditions.""" + paragraphs = soup.find_all("p") + skip_first_paragraph = False + filtered_paragraphs = [] + + for p in paragraphs: + # Skip the first

after the

Migration Complexity Explanation since nesting causes issues to be reported twice + prev_element = p.find_previous("h2") + if prev_element and "Migration Complexity Explanation" in prev_element.get_text(): + if not skip_first_paragraph: + skip_first_paragraph = True + continue + # Skip paragraph that starts with "Database Version:" as it vary according to the environment + if p.find("strong") and "Database Version:" in p.get_text(): + continue + filtered_paragraphs.append(p) + + return extract_and_normalize_texts(filtered_paragraphs) + +def normalize_table_names(values): + """Extract and normalize the table names from and and sort them.""" + table_names = [] + for v in values: + #Get the text and split it into lines + text_lines = v.get_text(separator="\n").split("\n") + + #Filter out empty lines and normalize each line + normalized_names = [normalize_text(line).strip() for line in text_lines if line.strip()] + + table_names.extend(normalized_names) + return sorted(table_names) + +def extract_table_data(tables): + """Sort tables by rows and their contents, including headers.""" + sorted_tables = [] + for table in tables: + rows = table.find_all("tr") + table_data = [] + table_headers = [] + for row in rows: + columns = row.find_all("td") + headers = row.find_all("th") + if len(columns) > 1: + table_data.append(normalize_table_names(columns)) + if len(headers) > 1: + table_headers.append(normalize_table_names(headers)) + if table_data: + sorted_tables.append(table_data) + if table_headers: + sorted_tables.append(table_headers) + return sorted_tables + +def extract_html_data(html_content): + """Main function to extract structured data from HTML content.""" + soup = BeautifulSoup(html_content, 'html.parser') + + data = { + "title": normalize_text(soup.title.string) if soup.title and soup.title.string else "No Title", + "headings": extract_and_normalize_texts(soup.find_all(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])), + "paragraphs": extract_paragraphs(soup), + "tables": extract_table_data(soup.find_all("table")), + "links": { + k: v for k, v in sorted( + {normalize_text(a.get("href") or ""): normalize_text(a.text) for a in soup.find_all("a")}.items() + ) + }, + "spans": extract_and_normalize_texts(soup.find_all("span")), + "divs": extract_divs(soup) + } + + return data + +def generate_diff_list(list1, list2, section_name, file1_path, file2_path): + """Generate a structured diff for ordered lists (headings, paragraphs, spans, divs) showing only differences.""" + if section_name == "tables": + # If list1 and list2 are already lists of table names, directly sort them + list1 = [sorted(table) if isinstance(table, list) else table for table in list1] + list2 = [sorted(table) if isinstance(table, list) else table for table in list2] + diff = list(difflib.unified_diff( + [f"{i+1}. {item}" for i, item in enumerate(list1)], + [f"{i+1}. {item}" for i, item in enumerate(list2)], + fromfile=f"{file1_path}", + tofile=f"{file2_path}", + lineterm="", + n=0 # Ensures ONLY differences are shown (no context lines) + )) + return "\n".join(diff) or None # Return None if no differences + +def dict_to_list(dict_data): + """Convert dictionary to list of formatted strings.""" + return [f"{k} -> {v}" for k, v in dict_data.items()] + +def compare_html_tags(html_data1, html_data2): + """Compare the unique tags and their counts in the two HTML reports.""" + + def get_tag_counts(html_content): + """Extracts all tag names and their counts from the given HTML content.""" + soup = BeautifulSoup(html_content, 'html.parser') + return Counter(tag.name for tag in soup.find_all()) + + tags_count1 = get_tag_counts(html_data1) + tags_count2 = get_tag_counts(html_data2) + + tags1 = set(tags_count1.keys()) + tags2 = set(tags_count2.keys()) + + missing_tags_in_file1 = tags2 - tags1 # Tags in file2 but missing in file1 + missing_tags_in_file2 = tags1 - tags2 # Tags in file1 but missing in file2 + + differences = {} + + if missing_tags_in_file1: + differences["extra_tags_in_the_actual_report"] = "\n".join(missing_tags_in_file1) + if missing_tags_in_file2: + differences["missing_tags_in_the_actual_report"] = "\n".join(missing_tags_in_file2) + + # Check for tag count mismatches + tag_count_mismatches = { + tag: f"Expected: {tags_count1[tag]}, Found: {tags_count2[tag]}" + for tag in (tags1 & tags2) # Tags present in both files + if tags_count1[tag] != tags_count2[tag] + } + + if tag_count_mismatches: + differences["tag_count_mismatches"] = "\n".join( + f"{tag}: {count}" for tag, count in tag_count_mismatches.items() + ) + + return differences + +def compare_html_data(html_data1, html_data2, file1, file2): + + differences = {} + + for section in html_data1.keys(): + if html_data1[section] != html_data2[section]: + if isinstance(html_data1[section], list): # For headings, paragraphs, spans, divs + diff = generate_diff_list(html_data1[section], html_data2[section], section, file1, file2) + elif isinstance(html_data1[section], dict): # For links dictionary + diff = generate_diff_list( + dict_to_list(html_data1[section]), + dict_to_list(html_data2[section]), + section, file1, file2 + ) + else: # Title (single string) + diff = generate_diff_list([html_data1[section]], [html_data2[section]], section, file1, file2) + + if diff: # Only store sections that have differences + differences[section] = diff + + return differences + +def read_and_compare_html_files(file1, file2): + """Read and extract structured data from HTML files.""" + with open(file1, "r", encoding="utf-8") as f1, open(file2, "r", encoding="utf-8") as f2: + html_data1 = f1.read() + html_data2 = f2.read() + + tags_differences = compare_html_tags(html_data1, html_data2) + data_differences = compare_html_data(extract_html_data(html_data1), extract_html_data(html_data2), file1, file2) + + # Print differences here + if not tags_differences and not data_differences: + print("The reports are matching.") + else: + print("The reports are not matching:") + + if tags_differences: + print("\n=== TAG DIFFERENCES ===") + for section, diff_text in tags_differences.items(): + print(f"\n=== {section.replace('_', ' ').upper()} ===") + print(diff_text) + + if data_differences: + for section, diff_text in data_differences.items(): + print(f"\n=== {section.upper()} DIFFERENCES ===") + print(diff_text) + + sys.exit(1) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Compare two HTML reports.") + parser.add_argument("report1", help="Path to the first HTML report") + parser.add_argument("report2", help="Path to the second HTML report") + + args = parser.parse_args() + read_and_compare_html_files(args.report1, args.report2) diff --git a/migtests/scripts/run-validate-assessment-report.sh b/migtests/scripts/run-validate-assessment-report.sh index 75e3d8875c..0650f22b53 100755 --- a/migtests/scripts/run-validate-assessment-report.sh +++ b/migtests/scripts/run-validate-assessment-report.sh @@ -70,12 +70,22 @@ main() { # Checking if the assessment reports were created if [ -f "${EXPORT_DIR}/assessment/reports/migration_assessment_report.html" ] && [ -f "${EXPORT_DIR}/assessment/reports/migration_assessment_report.json" ]; then echo "Assessment reports created successfully." + echo "Checking for Failures" validate_failure_reasoning "${EXPORT_DIR}/assessment/reports/migration_assessment_report.json" + echo "Comparing Report contents" - expected_file="${TEST_DIR}/expectedAssessmentReport.json" - actual_file="${EXPORT_DIR}/assessment/reports/migration_assessment_report.json" - compare_json_reports ${expected_file} ${actual_file} + + echo "Comparing JSON report" + expected_json_file="${TEST_DIR}/expectedAssessmentReport.json" + actual_json_file="${EXPORT_DIR}/assessment/reports/migration_assessment_report.json" + compare_json_reports ${expected_json_file} ${actual_json_file} + + echo "Comparing HTML report" + expected_html_file="${TEST_DIR}/expectedAssessmentReport.html" + actual_html_file="${EXPORT_DIR}/assessment/reports/migration_assessment_report.html" + ${SCRIPTS}/compare-html-reports.py ${expected_html_file} ${actual_html_file} + else echo "Error: Assessment reports were not created successfully." cat_log_file "yb-voyager-assess-migration.log" diff --git a/migtests/tests/oracle/assessment-report-test/expectedAssessmentReport.html b/migtests/tests/oracle/assessment-report-test/expectedAssessmentReport.html new file mode 100644 index 0000000000..8f00e86354 --- /dev/null +++ b/migtests/tests/oracle/assessment-report-test/expectedAssessmentReport.html @@ -0,0 +1,2392 @@ + + + + Migration Assessment Report + + + + +
+

Migration Assessment Report

+

Voyager Version: main

+

Database Name: ORCLPDB1

+ +

Schema Name: + + TEST_SCHEMA  + +

+ + +

Database Version: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

+ + +

Target YB Version: 2024.2.1.0

+ + +

Migration Complexity: MEDIUM

+ + +

Database Objects

+

Objects that will be created on the target YugabyteDB. Some of the index and sequence names might be different from those in the source database.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Object TypeTotal ObjectsObject Names
SEQUENCE1 +
+ + simple_log_seq
+ +
+
TABLE90 +
+ + "
+ + simple_car_type
+ + accounts_list_partitioned
+ + bfile_table
+ + blob_table
+ + c
+ + c1
+ + c2
+ + clob_table
+ + customers
+ + case_sensitive_columns
+ + departments
+ + dept
+ + emp
+ + employees
+ + employees2
+ + employees_misc
+ + empty_partition_table
+ + empty_partition_table2
+ + foo
+ + func_based_table
+ + func_rev_table
+ + generated_column_table
+ + iot_table
+ + mixed_case_table_name_test
+ + nclob_table
+ + orders
+ + orders_interval_partition
+ + order_items_range_partitioned
+ + reserved_column
+ + rev_table
+ + sales
+ + sales_bitmap_idx_table
+ + sales_hash
+ + session_log
+ + session_log1
+ + session_log2
+ + session_log3
+ + session_log4
+ + simple_cars_table
+ + simple_log
+ + simple_table
+ + sub_par_test
+ + synonym_table
+ + test_timezone
+ + text_table
+ + trunc_test
+ + view_table1
+ + view_table2
+ + xml_table
+ + "check"
+ + "group"
+ + accounts_list_partitioned_p_northwest
+ + accounts_list_partitioned_p_southwest
+ + accounts_list_partitioned_p_northeast
+ + accounts_list_partitioned_p_southeast
+ + accounts_list_partitioned_p_northcentral
+ + accounts_list_partitioned_p_southcentral
+ + departments_p1
+ + departments_p2
+ + departments_p3
+ + empty_partition_table_p_west
+ + empty_partition_table_p_east
+ + empty_partition_table2_p_west
+ + empty_partition_table2_p_east
+ + orders_interval_partition_interval_partition_less_than_2015
+ + orders_interval_partition_interval_partition_less_than_2016
+ + orders_interval_partition_interval_partition_less_than_2017
+ + orders_interval_partition_interval_partition_less_than_2018
+ + order_items_range_partitioned_p1
+ + order_items_range_partitioned_p2
+ + order_items_range_partitioned_p3
+ + sales_hash_p1
+ + sales_hash_p2
+ + sales_hash_p3
+ + sales_hash_p4
+ + sub_par_test_p1
+ + sub_par_test_p1_sp1
+ + sub_par_test_p1_sp11
+ + sub_par_test_p2
+ + sub_par_test_p2_sp2
+ + sub_par_test_p2_sp22
+ + sub_par_test_p3
+ + sub_par_test_p3_sp3
+ + sub_par_test_p3_sp33
+ + sub_par_test_p4
+ + sub_par_test_p4_sp4
+ + sub_par_test_p4_sp44
+ + sub_par_test_p5
+ + sub_par_test_p5_sp5
+ +
+
INDEX3 +
+ + func_based_table_data ON func_based_table
+ + orders_customer_id ON orders
+ + sales_bitmap_idx_table_product_id ON sales_bitmap_idx_table
+ +
+
TRIGGER1 +
+ + trg_simple_insert
+ +
+
FUNCTION2 +
+ + trunc_date
+ + trunc_time_stamp
+ +
+
PROCEDURE1 +
+ + insert_session_logs
+ +
+
SYNONYM1 +
+ + test_schema.syn
+ +
+
+ + +

Sharding Recommendations

+ + + + + + + + + + + +
Colocated TablesSharded Tables
+
+ + DEPARTMENTS_P1
+ + DEPARTMENTS_P2
+ + DEPARTMENTS_P3
+ + DEPT
+ + EMP
+ + EMPTY_PARTITION_TABLE2_P_EAST
+ + EMPTY_PARTITION_TABLE2_P_WEST
+ + EMPTY_PARTITION_TABLE_P_EAST
+ + EMPTY_PARTITION_TABLE_P_WEST
+ + GENERATED_COLUMN_TABLE
+ + IOT_TABLE
+ + SALES_HASH_P1
+ + SALES_HASH_P3
+ + SIMPLE_LOG
+ + SIMPLE_TABLE
+ + SYNONYM_TABLE
+ + BFILE_TABLE
+ + BLOB_TABLE
+ + C
+ + C1
+ + C2
+ + CLOB_TABLE
+ + CUSTOMERS
+ + Case_Sensitive_Columns
+ + EMPLOYEES
+ + EMPLOYEES_MISC
+ + EMPLOYEE_MV_IMMEDIATE
+ + FOO
+ + FUNC_BASED_TABLE
+ + FUNC_REV_TABLE
+ + Mixed_Case_Table_Name_Test
+ + NCLOB_TABLE
+ + ORDERS
+ + RESERVED_COLUMN
+ + REV_TABLE
+ + SALES_BITMAP_IDX_TABLE
+ + SESSION_LOG
+ + SESSION_LOG1
+ + SESSION_LOG2
+ + SESSION_LOG3
+ + SESSION_LOG4
+ + SIMPLE_CARS_TABLE
+ + TEST_TIMEZONE
+ + TEXT_TABLE
+ + TRUNC_TEST
+ + VIEW_TABLE1
+ + VIEW_TABLE2
+ + XML_TABLE
+ + check
+ + group
+ + ACCOUNTS_LIST_PARTITIONED_P_NORTHCENTRAL
+ + ACCOUNTS_LIST_PARTITIONED_P_NORTHEAST
+ + ACCOUNTS_LIST_PARTITIONED_P_NORTHWEST
+ + ACCOUNTS_LIST_PARTITIONED_P_SOUTHCENTRAL
+ + ACCOUNTS_LIST_PARTITIONED_P_SOUTHEAST
+ + ACCOUNTS_LIST_PARTITIONED_P_SOUTHWEST
+ + ORDERS_INTERVAL_PARTITION_INTERVAL_PARTITION_LESS_THAN_2015
+ + ORDERS_INTERVAL_PARTITION_INTERVAL_PARTITION_LESS_THAN_2016
+ + ORDERS_INTERVAL_PARTITION_INTERVAL_PARTITION_LESS_THAN_2017
+ + ORDERS_INTERVAL_PARTITION_INTERVAL_PARTITION_LESS_THAN_2018
+ + ORDER_ITEMS_RANGE_PARTITIONED_P1
+ + ORDER_ITEMS_RANGE_PARTITIONED_P2
+ + ORDER_ITEMS_RANGE_PARTITIONED_P3
+ + SALES_HASH_P2
+ + SALES_HASH_P4
+ + SUB_PAR_TEST_P1_SP1
+ + SUB_PAR_TEST_P1_SP11
+ + SUB_PAR_TEST_P2_SP2
+ + SUB_PAR_TEST_P2_SP22
+ + SUB_PAR_TEST_P3_SP3
+ + SUB_PAR_TEST_P3_SP33
+ + SUB_PAR_TEST_P4_SP4
+ + SUB_PAR_TEST_P4_SP44
+ + SUB_PAR_TEST_P5_SP5
+ +
+
+
+ +
+
+

Sizing Recommendations

+ + + + + + + + + + + + +
ParameterRecommendation
Num of Nodes3
vCPU per instance4
Memory per instance(GiB)16
Optimal select connections per node8
Optimal insert connections per node12
Parallel Voyager Jobs1
Estimated time taken for data import 1 min
+

Reasoning:

+

Recommended instance type with 4 vCPU and 16 GiB memory could fit 78 objects (74 tables/materialized views and 4 explicit/implicit indexes) with 192.00 MB size and throughput requirement of 0 reads/sec and 0 writes/sec as colocated. Non leaf partition tables/indexes and unsupported tables/indexes were not considered.

+ + + + + + +

Assessment Issues

+ +
+ +
+

Total Issues: 17

+

Below is a detailed breakdown of each issue.

+
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Category + + Issue + Object/SQL Preview + Impact +
+ +    + Unsupported Features + Compound Trigger + + trg_simple_insert + + -
+ +    + Unsupported Features + Unsupported Indexes + + Index Name: TEXT_INDEX, Index Type=DOMAIN INDEX + + -
+ +    + Unsupported Features + Unsupported Indexes + + Index Name: REV_INDEX, Index Type=NORMAL/REV INDEX + + -
+ +    + Unsupported Features + Unsupported Indexes + + Index Name: FUNC_REV_INDEX, Index Type=FUNCTION-BASED NORMAL/REV INDEX + + -
+ +    + Unsupported Features + Unsupported Indexes + + Index Name: IDX_EMP_DEPT_CLUSTER, Index Type=CLUSTER INDEX + + -
+ +    + Unsupported Features + Unsupported Indexes + + Index Name: PK_IOT_TABLE, Index Type=IOT - TOP INDEX + + -
+ +    + Unsupported Features + Inherited Types + + SIMPLE_CAR_TYPE + + -
+ +    + Unsupported Features + Virtual Columns + + XML_TABLE.DATA + + -
+ +    + Unsupported Features + Virtual Columns + + GENERATED_COLUMN_TABLE.TOTAL_PRICE + + -
+ +    + Unsupported Features + Unsupported Partitioning Methods + + Table Name: SALES, Partition Method: SYSTEM PARTITION + + -
+ +    + Unsupported Features + Unsupported Partitioning Methods + + Table Name: EMPLOYEES2, Partition Method: REFERENCE PARTITION + + -
+ +    + Unsupported Datatypes + XMLTYPE + + TEST_SCHEMA.XML_TABLE.DATA + + -
+ +    + Unsupported Datatypes + BFILE + + TEST_SCHEMA.BFILE_TABLE.DATA + + -
+ +    + Unsupported Datatypes + BLOB + + TEST_SCHEMA.BLOB_TABLE.DATA + + -
+ +    + Unsupported Datatypes + CLOB + + TEST_SCHEMA.CLOB_TABLE.DATA + + -
+ +    + Unsupported Datatypes + CLOB + + TEST_SCHEMA.TEXT_TABLE.TEXT_DATA + + -
+ +    + Unsupported Datatypes + NCLOB + + TEST_SCHEMA.NCLOB_TABLE.DATA + + -
+ + + +
+
+
+

Notes

+
    + +
  • For sharding/colocation recommendations, each partition is treated individually. During the export schema phase, all the partitions of a partitioned table are currently created as colocated by default. +To manually modify the schema, please refer: https://github.com/yugabyte/yb-voyager/issues/1581.
  • + +
  • Reference and System Partitioned tables are created as normal tables, but are not considered for target cluster sizing recommendations.
  • + +
  • There are some BITMAP indexes present in the schema that will get converted to GIN indexes, but GIN indexes are partially supported in YugabyteDB as mentioned in https://github.com/yugabyte/yugabyte-db/issues/7850 so take a look and modify them if not supported.
  • + +
+
+ + +
+ + diff --git a/migtests/tests/pg/assessment-report-test-uqc/expectedAssessmentReport.html b/migtests/tests/pg/assessment-report-test-uqc/expectedAssessmentReport.html new file mode 100644 index 0000000000..9d58f32728 --- /dev/null +++ b/migtests/tests/pg/assessment-report-test-uqc/expectedAssessmentReport.html @@ -0,0 +1,2544 @@ + + + + Migration Assessment Report + + + + +
+

Migration Assessment Report

+

Voyager Version: main

+

Database Name: pg_assessment_report_uqc

+ + +

Database Version: 17.3 (Ubuntu 17.3-1.pgdg22.04+1)

+ + +

Target YB Version: 2024.2.1.0

+ + +

Migration Complexity: MEDIUM

+ + +

Database Objects

+

Objects that will be created on the target YugabyteDB.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Object TypeTotal ObjectsObject Names
SCHEMA2 +
+ + analytics
+ + sales
+ +
+
EXTENSION1 +
+ + pg_stat_statements
+ +
+
SEQUENCE1 +
+ + sales.recent_transactions_transaction_id_seq
+ +
+
TABLE8 +
+ + analytics.metrics
+ + sales.big_table
+ + sales.customer_account
+ + sales.events
+ + sales.json_data
+ + sales.orders
+ + sales.recent_transactions
+ + sales.test_json_chk
+ +
+
FUNCTION1 +
+ + sales.get_user_info
+ +
+
VIEW3 +
+ + sales.employ_depart_view
+ + sales.event_analysis_view
+ + sales.event_analysis_view2
+ +
+
+ + +

Sharding Recommendations

+ + + + + + + + + + + +
Colocated TablesSharded Tables
+
+ + sales.big_table
+ + sales.json_data
+ + sales.recent_transactions
+ + sales.test_json_chk
+ + sales.orders
+ + sales.events
+ + sales.customer_account
+ + analytics.metrics
+ +
+
+
+ +
+
+

Sizing Recommendations

+ + + + + + + + + + + + +
ParameterRecommendation
Num of Nodes3
vCPU per instance4
Memory per instance(GiB)16
Optimal select connections per node8
Optimal insert connections per node12
Parallel Voyager Jobs1
Estimated time taken for data import 1 min
+

Reasoning:

+

Recommended instance type with 4 vCPU and 16 GiB memory could fit 8 objects (8 tables/materialized views and 0 explicit/implicit indexes) with 0.00 MB size and throughput requirement of 0 reads/sec and 0 writes/sec as colocated. Non leaf partition tables/indexes and unsupported tables/indexes were not considered.

+ + + + + +

Migration Complexity Explanation

+

Below is a breakdown of the issues detected in different categories for each impact level.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CategoryLevel 1Level 2Level 3Total
Unsupported Features0505
Unsupported Plpgsql Objects0101
Unsupported Query Constructs014014
Unsupported Datatypes0011
+ +

+ Complexity: MEDIUM
+ Reasoning: Found 0 Level 1 issue(s), 20 Level 2 issue(s) and 1 Level 3 issue(s), resulting in MEDIUM migration complexity +

+ +

+ Impact Levels:
+ Level 1: Resolutions are available with minimal effort.
+ Level 2: Resolutions are available requiring moderate effort.
+ Level 3: Resolutions may not be available or are complex. +

+ + +

Assessment Issues

+ +
+ +
+

Total Issues: 21

+

Below is a detailed breakdown of each issue.

+
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Category + + Issue + Object/SQL Preview + Impact +
+ +    + Unsupported Features + ANY_VALUE() aggregate Function + + sales.employ_depart_view + + Level 2
+ +    + Unsupported Features + Range aggregate Functions + + sales.event_analysis_view + + Level 2
+ +    + Unsupported Features + Range aggregate Functions + + sales.event_analysis_view2 + + Level 2
+ +    + Unsupported Features + Jsonb Subscripting + + sales.test_json_chk + + Level 2
+ +    + Unsupported Features + Json Type Predicate + + sales.json_data + + Level 2
+ +    + Unsupported Plpgsql Objects + Jsonb Subscripting + + sales.get_user_info + + Level 2
+ +    + Unsupported Query Constructs + Advisory Locks + + SELECT metric_name, pg_advisory_lock(metric_id) +FROM analytics.metrics +WHERE met ... + + Level 2
+ +    + Unsupported Query Constructs + Range aggregate Functions + + SELECT range_intersect_agg(event_range) AS intersection_of_ranges +FROM sales.eve ... + + Level 2
+ +    + Unsupported Query Constructs + Events Listen / Notify + + LISTEN my_table_changes + + Level 2
+ +    + Unsupported Query Constructs + CTE with MATERIALIZE clause + + WITH w AS NOT MATERIALIZED ( ... + + Level 2
+ +    + Unsupported Query Constructs + Jsonb Subscripting + + SELECT (jsonb_build_object($1, $2, $3, $4, $5, $6) || $7)[$8] AS json_obj + + Level 2
+ +    + Unsupported Query Constructs + Jsonb Subscripting + + SELECT ($1 :: jsonb)[$2][$3] as b + + Level 2
+ +    + Unsupported Query Constructs + CTE with MATERIALIZE clause + + WITH w AS MATERIALIZED ( ... + + Level 2
+ +    + Unsupported Query Constructs + Range aggregate Functions + + SELECT range_agg(event_range) AS union_of_ranges +FROM sales.events + + Level 2
+ +    + Unsupported Query Constructs + Jsonb Subscripting + + SELECT + data, + data[$1] AS name, + (data[$2]) as active +FROM sales.tes ... + + Level 2
+ +    + Unsupported Query Constructs + Merge Statement + + MERGE INTO sales.customer_account ca +USING sales.recent_transactions t +ON ... + + Level 2
+ +    + Unsupported Query Constructs + Jsonb Subscripting + + SELECT (sales.get_user_info($1))[$2] AS user_info + + Level 2
+ +    + Unsupported Query Constructs + Database options + + CREATE DATABASE strategy_example + WITH STRATEGY = 'wal_log' + + Level 2
+ +    + Unsupported Query Constructs + Json Type Predicate + + SELECT * +FROM sales.json_data +WHERE array_column IS JSON ARRAY + + Level 2
+ +    + Unsupported Query Constructs + ANY_VALUE() aggregate Function + + SELECT + any_value(name) AS any_employee + FROM employees + + Level 2
+ +    + Unsupported Datatypes + datemultirange + + sales.event_analysis_view.all_event_ranges + + Level 3
+ + + +
+
+
+

Notes

+ +
+ + +
+ + diff --git a/migtests/tests/pg/assessment-report-test/expectedAssessmentReport.html b/migtests/tests/pg/assessment-report-test/expectedAssessmentReport.html new file mode 100644 index 0000000000..b7cae530e1 --- /dev/null +++ b/migtests/tests/pg/assessment-report-test/expectedAssessmentReport.html @@ -0,0 +1,14924 @@ + + + + Migration Assessment Report + + + + +
+

Migration Assessment Report

+

Voyager Version: main

+

Database Name: pg_assessment_report

+ + +

Database Version: 17.3 (Ubuntu 17.3-1.pgdg22.04+1)

+ + +

Target YB Version: 2024.2.1.0

+ + +

Migration Complexity: HIGH

+ + +

Database Objects

+

Objects that will be created on the target YugabyteDB.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Object TypeTotal ObjectsObject Names
SCHEMA3 +
+ + public
+ + schema2
+ + test_views
+ +
+
COLLATION2 +
+ + public."numeric"
+ + schema2.ignore_accents
+ +
+
EXTENSION5 +
+ + citext
+ + hstore
+ + lo
+ + pg_stat_statements
+ + pgcrypto
+ +
+
TYPE5 +
+ + public.address_type
+ + public.enum_kind
+ + public.item_details
+ + schema2.enum_kind
+ + schema2.item_details
+ +
+
DOMAIN2 +
+ + public.person_name
+ + schema2.person_name
+ +
+
SEQUENCE42 +
+ + public."Case_Sensitive_Columns_id_seq"
+ + public."Mixed_Case_Table_Name_Test_id_seq"
+ + public."Recipients_id_seq"
+ + public."WITH_id_seq"
+ + public.bigint_multirange_table_id_seq
+ + public.date_multirange_table_id_seq
+ + public.employees2_id_seq
+ + public.employees_employee_id_seq
+ + public.employeesforview_id_seq
+ + public.ext_test_id_seq
+ + public.int_multirange_table_id_seq
+ + public.mixed_data_types_table1_id_seq
+ + public.mixed_data_types_table2_id_seq
+ + public.numeric_multirange_table_id_seq
+ + public.orders2_id_seq
+ + public.ordersentry_order_id_seq
+ + public.parent_table_id_seq
+ + public.timestamp_multirange_table_id_seq
+ + public.timestamptz_multirange_table_id_seq
+ + public.with_example1_id_seq
+ + public.with_example2_id_seq
+ + schema2."Case_Sensitive_Columns_id_seq"
+ + schema2."Mixed_Case_Table_Name_Test_id_seq"
+ + schema2."Recipients_id_seq"
+ + schema2."WITH_id_seq"
+ + schema2.bigint_multirange_table_id_seq
+ + schema2.date_multirange_table_id_seq
+ + schema2.employees2_id_seq
+ + schema2.employeesforview_id_seq
+ + schema2.ext_test_id_seq
+ + schema2.int_multirange_table_id_seq
+ + schema2.mixed_data_types_table1_id_seq
+ + schema2.mixed_data_types_table2_id_seq
+ + schema2.numeric_multirange_table_id_seq
+ + schema2.orders2_id_seq
+ + schema2.parent_table_id_seq
+ + schema2.timestamp_multirange_table_id_seq
+ + schema2.timestamptz_multirange_table_id_seq
+ + schema2.with_example1_id_seq
+ + schema2.with_example2_id_seq
+ + test_views.view_table1_id_seq
+ + test_views.view_table2_id_seq
+ +
+
TABLE93 +
+ + public."Case_Sensitive_Columns"
+ + public."Mixed_Case_Table_Name_Test"
+ + public."Recipients"
+ + public."WITH"
+ + public.audit
+ + public.bigint_multirange_table
+ + public.sales_region
+ + public.boston
+ + public.c
+ + public.parent_table
+ + public.child_table
+ + public.citext_type
+ + public.combined_tbl
+ + public.date_multirange_table
+ + public.documents
+ + public.employees
+ + public.employees2
+ + public.employeescopyfromwhere
+ + public.employeescopyonerror
+ + public.employeesforview
+ + public.ext_test
+ + public.foo
+ + public.inet_type
+ + public.int_multirange_table
+ + public.library_nested
+ + public.london
+ + public.mixed_data_types_table1
+ + public.mixed_data_types_table2
+ + public.numeric_multirange_table
+ + public.orders
+ + public.orders2
+ + public.orders_lateral
+ + public.ordersentry
+ + public.products
+ + public.sales_unique_nulls_not_distinct
+ + public.sales_unique_nulls_not_distinct_alter
+ + public.session_log
+ + public.session_log1
+ + public.session_log2
+ + public.sydney
+ + public.test_exclude_basic
+ + public.test_jsonb
+ + public.test_xml_type
+ + public.timestamp_multirange_table
+ + public.timestamptz_multirange_table
+ + public.ts_query_table
+ + public.tt
+ + public.users_unique_nulls_distinct
+ + public.users_unique_nulls_not_distinct
+ + public.users_unique_nulls_not_distinct_index
+ + public.with_example1
+ + public.with_example2
+ + schema2."Case_Sensitive_Columns"
+ + schema2."Mixed_Case_Table_Name_Test"
+ + schema2."Recipients"
+ + schema2."WITH"
+ + schema2.audit
+ + schema2.bigint_multirange_table
+ + schema2.sales_region
+ + schema2.boston
+ + schema2.c
+ + schema2.parent_table
+ + schema2.child_table
+ + schema2.date_multirange_table
+ + schema2.employees2
+ + schema2.employeesforview
+ + schema2.ext_test
+ + schema2.foo
+ + schema2.int_multirange_table
+ + schema2.london
+ + schema2.mixed_data_types_table1
+ + schema2.mixed_data_types_table2
+ + schema2.numeric_multirange_table
+ + schema2.orders
+ + schema2.orders2
+ + schema2.products
+ + schema2.sales_unique_nulls_not_distinct
+ + schema2.sales_unique_nulls_not_distinct_alter
+ + schema2.session_log
+ + schema2.session_log1
+ + schema2.session_log2
+ + schema2.sydney
+ + schema2.test_xml_type
+ + schema2.timestamp_multirange_table
+ + schema2.timestamptz_multirange_table
+ + schema2.tt
+ + schema2.users_unique_nulls_distinct
+ + schema2.users_unique_nulls_not_distinct
+ + schema2.users_unique_nulls_not_distinct_index
+ + schema2.with_example1
+ + schema2.with_example2
+ + test_views.view_table1
+ + test_views.view_table2
+ +
+
INDEX28 +
+ + idx1 ON public.combined_tbl
+ + idx2 ON public.combined_tbl
+ + idx3 ON public.combined_tbl
+ + idx4 ON public.combined_tbl
+ + idx5 ON public.combined_tbl
+ + idx6 ON public.combined_tbl
+ + idx7 ON public.combined_tbl
+ + idx8 ON public.combined_tbl
+ + idx9 ON public.combined_tbl
+ + idx_array ON public.documents
+ + idx_box_data ON public.mixed_data_types_table1
+ + idx_box_data_brin ON public.mixed_data_types_table1
+ + idx_citext ON public.citext_type
+ + idx_citext1 ON public.citext_type
+ + idx_citext2 ON public.citext_type
+ + idx_inet ON public.inet_type
+ + idx_inet1 ON public.inet_type
+ + idx_json ON public.test_jsonb
+ + idx_json2 ON public.test_jsonb
+ + idx_point_data ON public.mixed_data_types_table1
+ + idx_valid ON public.test_jsonb
+ + tsquery_idx ON public.ts_query_table
+ + tsvector_idx ON public.documents
+ + users_unique_nulls_not_distinct_index_email ON public.users_unique_nulls_not_distinct_index
+ + idx_box_data ON schema2.mixed_data_types_table1
+ + idx_box_data_spgist ON schema2.mixed_data_types_table1
+ + idx_point_data ON schema2.mixed_data_types_table1
+ + users_unique_nulls_not_distinct_index_email ON schema2.users_unique_nulls_not_distinct_index
+ +
+
FUNCTION19 +
+ + public.asterisks
+ + public.asterisks1
+ + public.auditlogfunc
+ + public.check_sales_region
+ + public.insert_non_decimal
+ + public.manage_large_object
+ + public.notify_and_insert
+ + public.prevent_update_shipped_without_date
+ + public.process_combined_tbl
+ + public.process_order
+ + public.total
+ + schema2.asterisks
+ + schema2.asterisks1
+ + schema2.auditlogfunc
+ + schema2.insert_non_decimal
+ + schema2.notify_and_insert
+ + schema2.prevent_update_shipped_without_date
+ + schema2.process_order
+ + schema2.total
+ +
+
AGGREGATE2 +
+ + public.inc_sum
+ + schema2.inc_sum
+ +
+
PROCEDURE3 +
+ + public.tt_insert_data
+ + public.update_combined_tbl_data
+ + schema2.tt_insert_data
+ +
+
VIEW10 +
+ + public.ordersentry_view
+ + public.sales_employees
+ + public.top_employees_view
+ + public.view_explicit_security_invoker
+ + schema2.sales_employees
+ + schema2.top_employees_view
+ + test_views.v1
+ + test_views.v2
+ + test_views.v3
+ + test_views.v4
+ +
+
TRIGGER4 +
+ + audit_trigger ON public.tt
+ + before_sales_region_insert_update ON public.sales_region
+ + t_raster ON public.combined_tbl
+ + audit_trigger ON schema2.tt
+ +
+
MVIEW3 +
+ + test_views.xyz_mview
+ + test_views.abc_mview
+ + test_views.mv1
+ +
+
RULE4 +
+ + protect_test_views_v1
+ + protect_test_views_v2
+ + protect_test_views_v3
+ + protect_test_views_view_table1
+ +
+
POLICY4 +
+ + policy_test_fine ON public.test_exclude_basic
+ + policy_test_fine_2 ON public.employees2
+ + policy_test_report ON public.test_xml_type
+ + policy_test_report ON schema2.test_xml_type
+ +
+
+ + +

Sharding Recommendations

+ + + + + + + + + + + +
Colocated TablesSharded Tables
+
+ + public.boston
+ + public.documents
+ + public.timestamp_multirange_table
+ + public.numeric_multirange_table
+ + public.tbl_unlogged
+ + public.users_unique_nulls_not_distinct
+ + public.test_exclude_basic
+ + public.employeesforview
+ + public.inet_type
+ + public.users_unique_nulls_distinct
+ + public.employees2
+ + public.users_unique_nulls_not_distinct_index
+ + public.sydney
+ + public.bigint_multirange_table
+ + public.orders2
+ + public.timestamptz_multirange_table
+ + public.ts_query_table
+ + public.mixed_data_types_table2
+ + public.parent_table
+ + public.sales_unique_nulls_not_distinct
+ + public.orders_lateral
+ + public.london
+ + public.sales_unique_nulls_not_distinct_alter
+ + public.child_table
+ + public.date_multirange_table
+ + public.int_multirange_table
+ + schema2.int_multirange_table
+ + schema2.users_unique_nulls_not_distinct
+ + schema2.boston
+ + schema2.numeric_multirange_table
+ + schema2.child_table
+ + schema2.employeesforview
+ + schema2.tt
+ + schema2.sydney
+ + schema2.mixed_data_types_table2
+ + schema2.tbl_unlogged
+ + schema2.ext_test
+ + schema2.date_multirange_table
+ + schema2.timestamptz_multirange_table
+ + schema2.timestamp_multirange_table
+ + schema2.orders2
+ + schema2.users_unique_nulls_distinct
+ + schema2.employees2
+ + schema2.users_unique_nulls_not_distinct_index
+ + schema2.bigint_multirange_table
+ + schema2.sales_unique_nulls_not_distinct_alter
+ + schema2.sales_unique_nulls_not_distinct
+ + schema2.parent_table
+ + schema2.london
+ + public.session_log
+ + public.employees
+ + public.ordersentry
+ + public.WITH
+ + public.session_log2
+ + public.foo
+ + public.audit
+ + public.products
+ + public.with_example2
+ + public.tt
+ + public.with_example1
+ + public.session_log1
+ + public.employeescopyonerror
+ + public.Recipients
+ + public.c
+ + public.Case_Sensitive_Columns
+ + public.library_nested
+ + public.ext_test
+ + public.orders
+ + public.employeescopyfromwhere
+ + public.Mixed_Case_Table_Name_Test
+ + public.test_xml_type
+ + schema2.Case_Sensitive_Columns
+ + schema2.with_example2
+ + schema2.Mixed_Case_Table_Name_Test
+ + schema2.session_log
+ + schema2.orders
+ + schema2.c
+ + schema2.session_log1
+ + schema2.WITH
+ + schema2.session_log2
+ + schema2.Recipients
+ + schema2.audit
+ + schema2.with_example1
+ + schema2.foo
+ + schema2.products
+ + schema2.test_xml_type
+ + test_views.abc_mview
+ + test_views.mv1
+ + test_views.view_table1
+ + test_views.view_table2
+ + test_views.xyz_mview
+ +
+
+
+ + public.combined_tbl
+ + public.citext_type
+ + public.test_jsonb
+ + public.mixed_data_types_table1
+ + schema2.mixed_data_types_table1
+ +
+
+

Sizing Recommendations

+ + + + + + + + + + + + +
ParameterRecommendation
Num of Nodes3
vCPU per instance4
Memory per instance(GiB)16
Optimal select connections per node8
Optimal insert connections per node12
Parallel Voyager Jobs1
Estimated time taken for data import 1 min
+

Reasoning:

+

Recommended instance type with 4 vCPU and 16 GiB memory could fit 109 objects (91 tables/materialized views and 18 explicit/implicit indexes) with 0.00 MB size and throughput requirement of 0 reads/sec and 0 writes/sec as colocated. Rest 28 objects (5 tables/materialized views and 23 explicit/implicit indexes) with 0.00 MB size and throughput requirement of 0 reads/sec and 0 writes/sec need to be migrated as range partitioned tables. Non leaf partition tables/indexes and unsupported tables/indexes were not considered.

+ + + + + +

Migration Complexity Explanation

+

Below is a breakdown of the issues detected in different categories for each impact level.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CategoryLevel 1Level 2Level 3Total
Unsupported Features507461
Unsupported Plpgsql Objects213015
Unsupported Query Constructs016016
Unsupported Datatypes002525
Migration Caveats220022
+ +

+ Complexity: HIGH
+ Reasoning: Found 36 Level 2 issue(s) and 29 Level 3 issue(s), resulting in HIGH migration complexity +

+ +

+ Impact Levels:
+ Level 1: Resolutions are available with minimal effort.
+ Level 2: Resolutions are available requiring moderate effort.
+ Level 3: Resolutions may not be available or are complex. +

+ + +

Assessment Issues

+ +
+ +
+

Total Issues: 139

+

Below is a detailed breakdown of each issue.

+
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Category + + Issue + Object/SQL Preview + Impact +
+ +    + Unsupported Features + Index with access method + + idx_box_data ON public.mixed_data_types_table1 + + Level 1
+ +    + Unsupported Features + Index with access method + + idx_point_data ON public.mixed_data_types_table1 + + Level 1
+ +    + Unsupported Features + Index with access method + + idx_box_data ON schema2.mixed_data_types_table1 + + Level 1
+ +    + Unsupported Features + Index with access method + + idx_point_data ON schema2.mixed_data_types_table1 + + Level 1
+ +    + Unsupported Features + Index with access method + + idx_box_data_brin ON public.mixed_data_types_table1 + + Level 1
+ +    + Unsupported Features + Index with access method + + idx_box_data_spgist ON schema2.mixed_data_types_table1 + + Level 1
+ +    + Unsupported Features + Constraint Trigger + + enforce_shipped_date_constraint ON public.orders2 + + Level 1
+ +    + Unsupported Features + Constraint Trigger + + enforce_shipped_date_constraint ON schema2.orders2 + + Level 1
+ +    + Unsupported Features + Table Inheritance + + public.child_table + + Level 3
+ +    + Unsupported Features + Table Inheritance + + schema2.child_table + + Level 3
+ +    + Unsupported Features + Stored Generated Columns + + public.employees2 + + Level 1
+ +    + Unsupported Features + Stored Generated Columns + + schema2.employees2 + + Level 1
+ +    + Unsupported Features + Exclusion Constraints + + public.test_exclude_basic, constraint: (no_same_name_address) + + Level 1
+ +    + Unsupported Features + Deferrable Constraints + + public.orders2, constraint: (orders2_order_number_key) + + Level 3
+ +    + Unsupported Features + Deferrable Constraints + + schema2.orders2, constraint: (orders2_order_number_key) + + Level 3
+ +    + Unsupported Features + View With Check Option + + public.sales_employees + + Level 1
+ +    + Unsupported Features + View With Check Option + + schema2.sales_employees + + Level 1
+ +    + Unsupported Features + Index on column with citext datatype + + idx_citext ON public.citext_type + + Level 1
+ +    + Unsupported Features + Index on column with tsvector datatype + + tsvector_idx ON public.documents + + Level 1
+ +    + Unsupported Features + Index on column with tsquery datatype + + tsquery_idx ON public.ts_query_table + + Level 1
+ +    + Unsupported Features + Index on column with jsonb datatype + + idx_json ON public.test_jsonb + + Level 1
+ +    + Unsupported Features + Index on column with jsonb datatype + + idx_json2 ON public.test_jsonb + + Level 1
+ +    + Unsupported Features + Index on column with inet datatype + + idx_inet ON public.inet_type + + Level 1
+ +    + Unsupported Features + Index on column with macaddr datatype + + idx2 ON public.combined_tbl + + Level 1
+ +    + Unsupported Features + Index on column with macaddr8 datatype + + idx3 ON public.combined_tbl + + Level 1
+ +    + Unsupported Features + Index on column with cidr datatype + + idx1 ON public.combined_tbl + + Level 1
+ +    + Unsupported Features + Index on column with bit datatype + + idx5 ON public.combined_tbl + + Level 1
+ +    + Unsupported Features + Index on column with varbit datatype + + idx6 ON public.combined_tbl + + Level 1
+ +    + Unsupported Features + Index on column with daterange datatype + + idx8 ON public.combined_tbl + + Level 1
+ +    + Unsupported Features + Index on column with interval datatype + + idx9 ON public.combined_tbl + + Level 1
+ +    + Unsupported Features + Index on column with pg_lsn datatype + + idx4 ON public.combined_tbl + + Level 1
+ +    + Unsupported Features + Index on column with array datatype + + idx_array ON public.documents + + Level 1
+ +    + Unsupported Features + Index on column with user defined datatype + + idx7 ON public.combined_tbl + + Level 1
+ +    + Unsupported Features + Primary/Unique key on column with complex datatype + + public.combined_tbl, constraint: (combined_tbl_bittv_key) + + Level 1
+ +    + Unsupported Features + Primary/Unique key on column with complex datatype + + public.combined_tbl, constraint: (combined_tbl_pkey) + + Level 1
+ +    + Unsupported Features + Primary/Unique key on column with complex datatype + + public.combined_tbl, constraint: (uk) + + Level 1
+ +    + Unsupported Features + BEFORE ROW triggers on partitioned tables + + before_sales_region_insert_update ON public.sales_region + + Level 1
+ +    + Unsupported Features + Advisory Locks + + public.ordersentry_view + + Level 2
+ +    + Unsupported Features + XML Functions + + public.ordersentry_view + + Level 2
+ +    + Unsupported Features + System Columns + + public.ordersentry_view + + Level 2
+ +    + Unsupported Features + Large Object Functions + + t_raster ON public.combined_tbl + + Level 2
+ +    + Unsupported Features + Regex Functions + + public.ordersentry + + Level 2
+ +    + Unsupported Features + FETCH .. WITH TIES + + public.top_employees_view + + Level 2
+ +    + Unsupported Features + FETCH .. WITH TIES + + schema2.top_employees_view + + Level 2
+ +    + Unsupported Features + Security Invoker Views + + public.view_explicit_security_invoker + + Level 1
+ +    + Unsupported Features + Non-Deterministic collations + + schema2.ignore_accents + + Level 1
+ +    + Unsupported Features + Unique Nulls Not Distinct + + public.sales_unique_nulls_not_distinct + + Level 1
+ +    + Unsupported Features + Unique Nulls Not Distinct + + public.sales_unique_nulls_not_distinct_alter + + Level 1
+ +    + Unsupported Features + Unique Nulls Not Distinct + + public.users_unique_nulls_not_distinct + + Level 1
+ +    + Unsupported Features + Unique Nulls Not Distinct + + schema2.sales_unique_nulls_not_distinct + + Level 1
+ +    + Unsupported Features + Unique Nulls Not Distinct + + schema2.sales_unique_nulls_not_distinct_alter + + Level 1
+ +    + Unsupported Features + Unique Nulls Not Distinct + + schema2.users_unique_nulls_not_distinct + + Level 1
+ +    + Unsupported Features + Unique Nulls Not Distinct + + users_unique_nulls_not_distinct_index_email ON public.users_unique_nulls_not_distinct_index + + Level 1
+ +    + Unsupported Features + Unique Nulls Not Distinct + + users_unique_nulls_not_distinct_index_email ON schema2.users_unique_nulls_not_distinct_index + + Level 1
+ +    + Unsupported Features + Foreign key constraint references partitioned table + + public.test_jsonb, constraint: (test_jsonb_id_region_fkey) + + Level 1
+ +    + Unsupported Features + SQL Body in function + + public.asterisks + + Level 1
+ +    + Unsupported Features + SQL Body in function + + public.asterisks1 + + Level 1
+ +    + Unsupported Features + SQL Body in function + + schema2.asterisks + + Level 1
+ +    + Unsupported Features + SQL Body in function + + schema2.asterisks1 + + Level 1
+ +    + Unsupported Features + COMPRESSION clause in table for TOASTing + + public.users_unique_nulls_distinct + + Level 1
+ +    + Unsupported Features + COMPRESSION clause in table for TOASTing + + schema2.users_unique_nulls_distinct + + Level 1
+ +    + Unsupported Plpgsql Objects + Referencing type declaration of variables + + public.process_combined_tbl + + Level 1
+ +    + Unsupported Plpgsql Objects + Referencing type declaration of variables + + public.update_combined_tbl_data + + Level 1
+ +    + Unsupported Plpgsql Objects + Advisory Locks + + public.process_order + + Level 2
+ +    + Unsupported Plpgsql Objects + Advisory Locks + + schema2.process_order + + Level 2
+ +    + Unsupported Plpgsql Objects + Non-decimal integer literal + + public.insert_non_decimal + + Level 2
+ +    + Unsupported Plpgsql Objects + Non-decimal integer literal + + schema2.insert_non_decimal + + Level 2
+ +    + Unsupported Plpgsql Objects + Large Object Functions + + public.manage_large_object + + Level 2
+ +    + Unsupported Plpgsql Objects + Events Listen / Notify + + public.notify_and_insert + + Level 2
+ +    + Unsupported Plpgsql Objects + Events Listen / Notify + + public.notify_and_insert + + Level 2
+ +    + Unsupported Plpgsql Objects + Events Listen / Notify + + public.notify_and_insert + + Level 2
+ +    + Unsupported Plpgsql Objects + Events Listen / Notify + + public.notify_and_insert + + Level 2
+ +    + Unsupported Plpgsql Objects + Events Listen / Notify + + schema2.notify_and_insert + + Level 2
+ +    + Unsupported Plpgsql Objects + Events Listen / Notify + + schema2.notify_and_insert + + Level 2
+ +    + Unsupported Plpgsql Objects + Events Listen / Notify + + schema2.notify_and_insert + + Level 2
+ +    + Unsupported Plpgsql Objects + Events Listen / Notify + + schema2.notify_and_insert + + Level 2
+ +    + Unsupported Query Constructs + Advisory Locks + + SELECT pg_advisory_unlock_all() + + Level 2
+ +    + Unsupported Query Constructs + XML Functions + + SELECT + o.order_id, + items.product, + items.quantity::INT +FROM + order ... + + Level 2
+ +    + Unsupported Query Constructs + XML Functions + + SELECT xmlparse(document $1) as xmldata + + Level 2
+ +    + Unsupported Query Constructs + XML Functions + + SELECT xmlelement(name root, xmlelement(name child, $1)) + + Level 2
+ +    + Unsupported Query Constructs + Advisory Locks + + SELECT pg_advisory_xact_lock($1,$2) + + Level 2
+ +    + Unsupported Query Constructs + Advisory Locks + + SELECT pg_advisory_lock($1,$2) + + Level 2
+ +    + Unsupported Query Constructs + COPY ... ON_ERROR + + COPY employeesCopyOnError (id, name, age) +FROM STDIN WITH (FORMAT csv, ON_ERROR ... + + Level 2
+ +    + Unsupported Query Constructs + XML Functions + + SELECT xml_is_well_formed($1) + + Level 2
+ +    + Unsupported Query Constructs + XML Functions + + SELECT + s.section_name, + b.title, + b.author +FROM + library_nested l, + ... + + Level 2
+ +    + Unsupported Query Constructs + XML Functions + + SELECT xmlforest(first_name AS element1, last_name AS element2) FROM employees2 + + Level 2
+ +    + Unsupported Query Constructs + Advisory Locks + + SELECT pg_advisory_unlock($1,$2) + + Level 2
+ +    + Unsupported Query Constructs + System Columns + + SELECT ctid, tableoid, xmin, xmax, cmin, cmax +FROM employees2 + + Level 2
+ +    + Unsupported Query Constructs + COPY FROM ... WHERE + + COPY employeesCopyFromWhere (id, name, age) +FROM STDIN WITH (FORMAT csv) +WHERE a ... + + Level 2
+ +    + Unsupported Query Constructs + XML Functions + + SELECT * +FROM xmltable( + $1 + PASSING $2 + COLUMNS + name TEXT PAT ... + + Level 2
+ +    + Unsupported Query Constructs + Large Object Functions + + SELECT lo_create($1) + + Level 2
+ +    + Unsupported Query Constructs + XML Functions + + SELECT table_to_xml($1, $2, $3, $4) + + Level 2
+ +    + Unsupported Datatypes + txid_snapshot + + public.mixed_data_types_table1.snapshot_data + + Level 3
+ +    + Unsupported Datatypes + xml + + schema2.test_xml_type.data + + Level 3
+ +    + Unsupported Datatypes + txid_snapshot + + schema2.mixed_data_types_table1.snapshot_data + + Level 3
+ +    + Unsupported Datatypes + pg_lsn + + schema2.mixed_data_types_table2.lsn_data + + Level 3
+ +    + Unsupported Datatypes + int8multirange + + public.bigint_multirange_table.value_ranges + + Level 3
+ +    + Unsupported Datatypes + xid + + public.ordersentry_view.transaction_id + + Level 3
+ +    + Unsupported Datatypes + xml + + public.library_nested.lib_data + + Level 3
+ +    + Unsupported Datatypes + tsmultirange + + public.timestamp_multirange_table.event_times + + Level 3
+ +    + Unsupported Datatypes + datemultirange + + schema2.date_multirange_table.project_dates + + Level 3
+ +    + Unsupported Datatypes + int8multirange + + schema2.bigint_multirange_table.value_ranges + + Level 3
+ +    + Unsupported Datatypes + xml + + public.ordersentry_view.summary_xml + + Level 3
+ +    + Unsupported Datatypes + int4multirange + + schema2.int_multirange_table.value_ranges + + Level 3
+ +    + Unsupported Datatypes + xml + + public.test_xml_type.data + + Level 3
+ +    + Unsupported Datatypes + xml + + public.orders_lateral.order_details + + Level 3
+ +    + Unsupported Datatypes + tsmultirange + + schema2.timestamp_multirange_table.event_times + + Level 3
+ +    + Unsupported Datatypes + lo + + public.combined_tbl.raster + + Level 3
+ +    + Unsupported Datatypes + nummultirange + + schema2.numeric_multirange_table.price_ranges + + Level 3
+ +    + Unsupported Datatypes + pg_lsn + + public.mixed_data_types_table2.lsn_data + + Level 3
+ +    + Unsupported Datatypes + tstzmultirange + + public.timestamptz_multirange_table.global_event_times + + Level 3
+ +    + Unsupported Datatypes + xml + + public.ordersentry_view.order_xml + + Level 3
+ +    + Unsupported Datatypes + tstzmultirange + + schema2.timestamptz_multirange_table.global_event_times + + Level 3
+ +    + Unsupported Datatypes + pg_lsn + + public.combined_tbl.lsn + + Level 3
+ +    + Unsupported Datatypes + nummultirange + + public.numeric_multirange_table.price_ranges + + Level 3
+ +    + Unsupported Datatypes + datemultirange + + public.date_multirange_table.project_dates + + Level 3
+ +    + Unsupported Datatypes + int4multirange + + public.int_multirange_table.value_ranges + + Level 3
+ +    + Migration Caveats + Policy with Roles + + policy_test_report ON public.test_xml_type + + Level 1
+ +    + Migration Caveats + Policy with Roles + + policy_test_report ON schema2.test_xml_type + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration + + public.mixed_data_types_table2.lseg_data (lseg) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration + + public.mixed_data_types_table1.lseg_data (lseg) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration + + public.mixed_data_types_table2.path_data (path) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration + + schema2.mixed_data_types_table1.lseg_data (lseg) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration + + schema2.mixed_data_types_table1.box_data (box) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration + + public.mixed_data_types_table1.box_data (box) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration + + schema2.mixed_data_types_table1.point_data (point) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration + + schema2.mixed_data_types_table2.lseg_data (lseg) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration + + public.mixed_data_types_table1.point_data (point) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration + + schema2.mixed_data_types_table2.path_data (path) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration with fall-forward/fallback + + schema2.orders.item (schema2.item_details) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration with fall-forward/fallback + + public.documents.content_tsvector (tsvector) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration with fall-forward/fallback + + public.ts_query_table.query (tsquery) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration with fall-forward/fallback + + public.combined_tbl.arr_enum (public.enum_kind[]) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration with fall-forward/fallback + + public.combined_tbl.address (public.address_type) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration with fall-forward/fallback + + public.orders.item (public.item_details) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration with fall-forward/fallback + + public.combined_tbl.data (public.hstore) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration with fall-forward/fallback + + public.products.item (public.item_details) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration with fall-forward/fallback + + schema2.products.item (schema2.item_details) + + Level 1
+ +    + Migration Caveats + Unsupported datatype for Live migration with fall-forward/fallback + + public.documents.title_tsvector (tsvector) + + Level 1
+ + + +
+
+
+

Notes

+
    + +
  • There are some Unlogged tables in the schema. They will be created as regular LOGGED tables in YugabyteDB as unlogged tables are not supported.
  • + +
  • Limitations in assessment
  • + +
+
+ + +
+ +