ā§Ļā§Ē āφāĻ—, ⧍ā§Ļ⧍ā§Ģ¡6 āĻŽāĻŋāύāĻŋāϟ āĻĒāĻĄāĻŧāϤ⧇

PostgreSQL āϏāĻžāĻ°ā§āϚ āϏāĻ°ā§āĻŦāĻ¤ā§āϰ: āĻĢ⧁āϞ-āĻŸā§‡āĻ•ā§āϏāϟ, āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āĻ“ āĻĒāĻžāĻ°ā§āĻļāĻŋāϝāĻŧāĻžāϞ āχāύāĻĄā§‡āĻ•ā§āϏ

āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇āϰ āϜāĻ¨ā§āϝ PostgreSQL āϏāĻžāĻ°ā§āϚ ‘āϏāĻžāĻ°ā§āϚ-āĻāĻ­āĻžāϰāĻŋāĻ“āϝāĻŧā§āϝāĻžāĻ°â€™ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻžāϰ āĻ•ā§ŒāĻļāϞ āĻļāĻŋāϖ⧁āĻ¨â€”āĻ•āĻ–āύ āĻĢ⧁āϞ-āĻŸā§‡āĻ•ā§āϏāϟ, āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āĻ“ āĻĒāĻžāĻ°ā§āĻļāĻŋāϝāĻŧāĻžāϞ āχāύāĻĄā§‡āĻ•ā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĻā§āϰ⧁āϤ āϰ⧇āϜāĻžāĻ˛ā§āϟ āĻĒāĻžāĻŦ⧇āύāĨ¤

PostgreSQL āϏāĻžāĻ°ā§āϚ āϏāĻ°ā§āĻŦāĻ¤ā§āϰ: āĻĢ⧁āϞ-āĻŸā§‡āĻ•ā§āϏāϟ, āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āĻ“ āĻĒāĻžāĻ°ā§āĻļāĻŋāϝāĻŧāĻžāϞ āχāύāĻĄā§‡āĻ•ā§āϏ

āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞ⧇ “āϏāĻžāĻ°ā§āϚ āϏāĻ°ā§āĻŦāĻ¤ā§āĻ°â€ āφāϏāϞ⧇ āϕ⧀ āĻŦā§‹āĻāĻžāϝāĻŧ

āĻāĻ•āϟāĻŋ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇, “āϏāĻžāĻ°ā§āϚ āϏāĻ°ā§āĻŦāĻ¤ā§āĻ°â€ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻŽāĻžāύ⧇: “āφāĻŽāĻŋ āϝ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϰ⧇āĻ•āĻ°ā§āĻĄāϟāĻž āĻ­āĻžāĻŦāĻ›āĻŋ, āϏ⧇āϟāĻž āĻĻā§āϰ⧁āϤ āϖ⧁āρāĻœā§‡ āĻĒ⧇āϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧁āύ, āĻāĻŽāύāĻ•āĻŋ āϝāĻĻāĻŋ āφāĻŽāĻŋ āϏ⧇āϟāĻŋ āĻĒ⧁āϰ⧋āϟāĻž āĻŽāύ⧇ āύāĻž āϰāĻžāĻ–āĻŋāĨ¤â€ āĻŽāĻžāύ⧁āώ āĻŦā§āϰāĻžāωāϜ āĻ•āϰāϛ⧇ āύāĻžâ€”āϤāĻžāϰāĻž āϏāϰāĻžāϏāϰāĻŋ āĻāĻ•āϜāύ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ, āϟāĻŋāĻ•āĻŋāϟ, āχāύāĻ­āϝāĻŧ⧇āϏ āĻŦāĻž āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āϚāϞ⧇ āϝ⧇āϤ⧇ āϚāĻžāϝāĻŧāĨ¤

āĻāχ āĻ•āĻžāϰāϪ⧇āχ āϧ⧀āϰ āϏāĻžāĻ°ā§āϚ āϧ⧀āϰ āĻĒ⧇āϜ āϞ⧋āĻĄā§‡āϰ āĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āĻ–āĻžāϰāĻžāĻĒ āϞāĻžāϗ⧇āĨ¤ āĻāĻ•āϟāĻŋ āĻĒ⧇āϜ āϞ⧋āĻĄ āĻāĻ•āĻŦāĻžāϰ āĻšāϝāĻŧ; āϏāĻžāĻ°ā§āϚ āĻāĻ•āĻžāϧāĻŋāĻ•āĻŦāĻžāϰ āϚāĻžāϞāĻžāύ⧋ āĻšāϝāĻŧ, āĻĒā§āϰāĻžāϝāĻŧāχ āϕ⧇āω āĻ•āϞ āϚāĻžāϞāĻŋāϝāĻŧ⧇ āϰāĻžāĻ–āϞ⧇ āĻŦāĻž āĻŸā§āϰāĻžāϝāĻŧāĻžāϜ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧāĨ¤ āϝāĻĻāĻŋ āϰ⧇āϜāĻžāĻ˛ā§āϟ 2–3 āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āϞāĻžāϗ⧇, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻŦāĻĻāϞ⧇, āĻŦā§āϝāĻžāĻ•āĻ¸ā§āĻĒ⧇āϏ āϚāĻžāĻĒāĻŋāϝāĻŧ⧇, āĻ…āĻ¨ā§āϝ āϟāĻžāĻ°ā§āĻŽ āĻšā§‡āĻˇā§āϟāĻž āĻ•āĻ°ā§‡â€”āĻĢāϞ⧇ āϞ⧋āĻĄ āĻ“ āĻšāϤāĻžāĻļāĻž āĻŦāĻžāĻĄāĻŧ⧇āĨ¤

āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āϚ āĻŦāĻ•ā§āϏ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž āφāĻļāĻž āĻ•āϰ⧇ āĻāĻ•āϗ⧁āĻšā§āĻ› āφāϚāϰāĻŖ: āĻĒāĻžāĻ°ā§āĻļāĻŋāϝāĻŧāĻžāϞ āĻŽā§āϝāĻžāϚ ("alex" āϖ⧁āρāĻœā§‡ "Alexander"), āϛ⧋āϟ āϟāĻžāχāĻĒā§‹ āϏāĻšā§āϝ ("microsfot"-āĻāĻ“ "Microsoft" āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇), āϝ⧌āĻ•ā§āϤāĻŋāĻ• “āϏ⧇āϰāĻž āĻĢāϞāĻžāĻĢāĻ˛â€ āĻ…āĻ°ā§āĻĄāĻžāϰāĻŋāĻ‚ (āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āφāχāĻĄāĻŋ āĻŦāĻž āχāĻŽā§‡āχāϞ āωāĻĒāϰ⧇āϰ āĻĻāĻŋāϕ⧇), āϏāĻžāĻŽāĻžāĻ¨ā§āϝ āϰāĻŋāϏ⧇āĻ¨ā§āϏāĻŋ āĻŦāĻžāϝāĻŧāĻžāϏ, āĻāĻŦāĻ‚ āĻĄāĻŋāĻĢāĻ˛ā§āϟāĻ­āĻžāĻŦ⧇ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ (āĻ“āĻĒ⧇āύ āϟāĻŋāĻ•āĻŋāϟ, āĻ…ā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ)āĨ¤

āĻ•āĻ āĻŋāύ āĻ…āĻ‚āĻļ āĻšāϞ⧋, āĻāĻ• āχāύāĻĒ⧁āϟ āĻĒā§āϰāĻžāϝāĻŧāχ āĻāĻ•āĻžāϧāĻŋāĻ• āχāĻ¨ā§āĻŸā§‡āĻ¨ā§āϟ āĻĸ⧇āϕ⧇ āϰāĻžāϖ⧇āĨ¤ āĻāĻ•āϜāύ āĻāĻœā§‡āĻ¨ā§āϟ āϟāĻŋāĻ•āĻŋāϟ āύāĻŽā§āĻŦāϰ āĻĒ⧇āĻ¸ā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇, āύāĻžāĻŽā§‡ āĻāĻ• āĻĢā§āĻ°ā§āϝāĻžāĻ—āĻŽā§‡āĻ¨ā§āϟ āϟāĻžāχāĻĒ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇, āχāĻŽā§‡āχāϞ āϏāĻžāĻ°ā§āϚ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇, āĻŦāĻž āĻĢā§‹āύ āύāĻžāĻŽā§āĻŦāĻžāϰ āĻāĻ¨ā§āϟāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āχāĻ¨ā§āĻŸā§‡āĻ¨ā§āϟ āĻ­āĻŋāĻ¨ā§āύ āĻ•ā§ŒāĻļāϞ, āĻ­āĻŋāĻ¨ā§āύ āχāύāĻĄā§‡āĻ•ā§āϏ āĻāĻŦāĻ‚ āĻ•āĻ–āύāĻ“ āĻ•āĻ–āύāĻ“ āĻ­āĻŋāĻ¨ā§āύ āĻ°â€ā§āϝāĻžāĻ™ā§āĻ•āĻŋāĻ‚ āύāĻŋāϝāĻŧāĻŽ āϚāĻžāϝāĻŧāĨ¤

āϤāĻžāχ āχāύāĻĄā§‡āĻ•ā§āϏ āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻŦ⧇āύ āύāĻžāĨ¤ āφāϗ⧇ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž āϕ⧋āύ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āϏāĻžāĻ°ā§āϚ āχāĻ¨ā§āĻŸā§‡āĻ¨ā§āϟ āφāϏāϞ⧇ āĻ•āϰ⧇ āϤāĻž āϞāĻŋāĻ¸ā§āϟ āĻ•āϰ⧁āύ, āĻāĻŦāĻ‚ āφāχāĻĄā§‡āĻ¨ā§āϟāĻŋāϟāĻŋ āĻĢāĻŋāĻ˛ā§āĻĄ (IDs, emails) āφāϞāĻžāĻĻāĻž āĻ•āϰ⧁āύ āĻĢāĻžāϜāĻŋ āĻĢāĻŋāĻ˛ā§āĻĄ (names, subjects) āĻ“ āϞāĻŽā§āĻŦāĻž āĻŸā§‡āĻ•ā§āϏāϟ (notes) āĻĨ⧇āϕ⧇āĨ¤

āĻĄā§‡āϟāĻž āĻāĻŦāĻ‚ āϏāĻžāĻ°ā§āϚ āφāϚāϰāĻŖāϗ⧁āϞ⧋ āύāĻžāĻŽāĻ•āϰāĻŖ āĻ•āϰ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ

āϕ⧋āύ āχāύāĻĄā§‡āĻ•ā§āϏ āĻŦāĻžāĻ›āĻŦ⧇āύ āϤāĻžāϰ āφāϗ⧇ āϞāĻŋāϖ⧇ āύāĻŋāύ āĻŽāĻžāύ⧁āώ āĻ āĻŋāĻ• āϕ⧀ āϟāĻžāχāĻĒ āĻ•āϰ⧇āĨ¤ “PostgreSQL search everywhere” āĻāĻ• āĻĢāĻŋāϚāĻžāϰ āĻļā§‹āύāĻžāϞ⧇āĻ“, āĻĒā§āϰāĻ•ā§ƒāϤāĻĒāĻ•ā§āώ⧇ āĻāϟāĻŋ āĻŦ⧇āĻļ āĻ­āĻŋāĻ¨ā§āύ āϏāĻžāĻ°ā§āĻšā§‡āϰ āĻŽāĻŋāĻļā§āϰāĻŖāĨ¤

āχāĻ¨ā§āϟāĻžāϰāύāĻžāϞ āϟ⧁āϞāϗ⧁āϞ⧋ “āĻšāĻžāĻ°ā§āĻĄâ€ āφāχāĻĄā§‡āĻ¨ā§āϟāĻŋāĻĢāĻžāϝāĻŧāĻžāϰ (order ID, ticket number, invoice code) āĻ“ “āϏāĻĢāĻŸâ€ āĻŸā§‡āĻ•ā§āϏāϟ (customer name, email, notes, tags) āĻŽāĻŋāĻļāĻžāϝāĻŧāĨ¤ āĻāχ āĻ—ā§āϰ⧁āĻĒāϗ⧁āϞ⧋ PostgreSQL-āĻ āĻ­āĻŋāĻ¨ā§āύāĻ­āĻžāĻŦ⧇ āφāϚāϰāĻŖ āĻ•āϰ⧇, āϤāĻžāχ āϏāĻŦāĻ•āĻŋāϛ⧁āϕ⧇ āĻāĻ•āχāĻ­āĻžāĻŦ⧇ āĻŸā§āϰāĻŋāϟ āĻ•āϰāĻž āϧ⧀āϰ āĻ•ā§ā§Ÿā§‡āϰāĻŋāϰ āĻĻāĻŋāϕ⧇ āϚāĻžāϞāĻŋāϤ āĻ•āϰ⧇āĨ¤

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϧāĻžāĻĒ⧇ āφāϚāϰāĻŖāϗ⧁āϞ⧋ āφāϞāĻžāĻĻāĻž āĻ•āϰ⧁āύ:

  • āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āϞ⧁āĻ•āφāĻĒ: āϕ⧇āω TCK-104883 āϖ⧁āρāϜāϞ⧇ āĻāϕ⧇āĻŦāĻžāϰ⧇āχ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻāĻ• āϰ⧇āϜāĻžāĻ˛ā§āϟ āφāĻļāĻž āĻ•āϰ⧇āĨ¤
  • āĻĢāĻžāϜāĻŋ āϞ⧁āĻ•āφāĻĒ: āϕ⧇āω john smth āϞāĻŋāĻ–āϞ⧇ āύāĻžāĻŽā§‡ (āĻāĻŦāĻ‚ āĻšāϝāĻŧāϤ⧋ āχāĻŽā§‡āχāϞ⧇) āύāϰāĻŽ āĻŽāĻŋāϞ āϚāĻžāϝāĻŧ āĻāĻŦāĻ‚ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āϤāĻžāϞāĻŋāĻ•āĻž āĻ¸ā§āĻ•ā§āϝāĻžāύ āĻ•āϰāĻŦ⧇āĨ¤
  • āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ-āϚāĻžāϞāĻŋāϤ āϏāĻžāĻ°ā§āϚ: āϕ⧇āω “Status = Open” āĻāĻŦāĻ‚ “Assigned to = Me” āĻŦ⧇āϛ⧇ āύāĻŋāϞ⧇ āĻāϟāĻž āĻŽā§‚āϞāϤ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāĻŋāĻ‚; āĻŸā§‡āĻ•ā§āϏāϟ āĻŦāĻ•ā§āϏ āϏ⧇āϕ⧇āĻ¨ā§āĻĄāĻžāϰāĻŋāĨ¤

āĻļ⧁āϰ⧁āϤ⧇āχ āĻ āĻŋāĻ• āĻ•āϰ⧁āύ āϰ⧇āϜāĻžāĻ˛ā§āϟāϗ⧁āϞ⧋āϕ⧇ āĻ°â€ā§āϝāĻžāĻ‚āĻ• āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻ•āĻŋ āύāĻžāĨ¤ āĻ°â€ā§āϝāĻžāĻ™ā§āĻ•āĻŋāĻ‚ āύ⧋āϟ āĻ“ āĻŦāĻĄāĻŧ āĻŦāĻ°ā§āĻŖāύāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤ IDs āĻ“ āχāĻŽā§‡āχāϞ⧇āϰ āϜāĻ¨ā§āϝ āĻ°â€ā§āϝāĻžāĻ™ā§āĻ•āĻŋāĻ‚ āĻĒā§āϰāĻžāϝāĻŧāχ āĻāϞ⧋āĻŽā§‡āϞ⧋ āĻŽāύ⧇ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻ–āϰāϚ āĻŦāĻžāĻĄāĻŧāĻžāϝāĻŧāĨ¤

āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻšā§‡āĻ•āϞāĻŋāĻ¸ā§āϟ āϏāĻžāϧāĻžāϰāĻŖāϤ āϝāĻĨ⧇āĻˇā§āϟ:

  • āϕ⧋āύ āĻĢāĻŋāĻ˛ā§āĻĄāϗ⧁āϞ⧋ āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ āϏāĻžāĻ°ā§āϚ āĻšāĻŦ⧇?
  • āϕ⧋āύ āχāύāĻĒ⧁āϟ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ (IDs, codes), āĻĢāĻžāϜāĻŋ (names), āĻŦāĻž āϞāĻŽā§āĻŦāĻž āĻŸā§‡āĻ•ā§āϏāϟ (notes)?
  • āϕ⧋āύ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻĒā§āϰāĻžāϝāĻŧ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻžāĻ°ā§āĻšā§‡ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻšāϝāĻŧ?
  • “āϏ⧇āϰāĻž āĻŽāĻŋāĻ˛â€ āĻ…āĻ°ā§āĻĄāĻžāϰāĻŋāĻ‚ āĻĻāϰāĻ•āĻžāϰ āĻ•āĻŋ, āύāĻžāĻ•āĻŋ āϕ⧋āύ⧋ āĻŽā§āϝāĻžāϚāχ āϚāϞāĻŦ⧇?
  • āĻŸā§‡āĻŦāĻŋāϞ āĻ•āϤ āĻĻā§āϰ⧁āϤ āĻŦāĻžāĻĄāĻŧāĻŦ⧇: āĻšāĻžāϜāĻžāϰ, āϞāĻ•ā§āώ, āύāĻž āĻŽāĻŋāϞāĻŋāϝāĻŧāύ?

āĻāχ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤāϗ⧁āϞ⧋ āφāϗ⧇ āύāĻŋāϞ⧇ āĻĒāϰ⧇ āχāύāĻĄā§‡āĻ•ā§āϏ āĻŦāĻžāĻ›āĻžāχ āϗ⧇āϏāĻ“āϝāĻŧāĻžāĻ°ā§āϕ⧇āϰ āĻŽāϤ⧋ āϞāĻžāĻ—āĻŦ⧇ āύāĻžāĨ¤

āĻŦ⧇āϏāϞāĻžāχāύ: āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āĻŽā§āϝāĻžāϚ āĻāĻŦāĻ‚ āϕ⧇āύ ILIKE āĻĒā§āϰāĻžāϝāĻŧāχ āϏāĻŽāĻ¸ā§āϝāĻž āϤ⧈āϰāĻŋ āĻ•āϰ⧇

āϏāĻšāϜ āϜāĻŋāύāĻŋāϏāϗ⧁āϞ⧋ āφāϗ⧇ āϞāĻ• āĻ•āϰ⧇ āύāĻŋāύāĨ¤ āĻ…āύ⧇āĻ• āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ B-tree āχāύāĻĄā§‡āĻ•ā§āϏāχ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āĻŽā§āϝāĻžāĻšā§‡āϰ āϜāĻ¨ā§āϝ āĻŽā§āĻšā§‚āĻ°ā§āϤ⧇āϰ āĻĢāϞ āĻĻ⧇āϝāĻŧ—ID, āĻ…āĻ°ā§āĻĄāĻžāϰ āύāĻŽā§āĻŦāϰ, āχāĻŽā§‡āχāϞ, āĻāĻ•ā§āϏāϟāĻžāĻ°ā§āύāĻžāϞ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏāĨ¤

āϝāĻĻāĻŋ āϕ⧇āω āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āĻŽāĻžāύ āĻĒ⧇āĻ¸ā§āϟ āĻ•āϰ⧇, āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ āφāĻĒāύāĻžāϰ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āϏāĻ¤ā§āϝāĻŋāχ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ: WHERE id = ... āĻŦāĻž WHERE email = ... āϏāĻžāϧāĻžāϰāĻŖ āχāύāĻĄā§‡āĻ•ā§āϏ⧇ āĻ…āĻ¤ā§āϝāĻ¨ā§āϤ āĻĻā§āϰ⧁āϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āχāĻŽā§‡āχāϞ⧇āϰ āωāĻĒāϰ⧇ unique āχāύāĻĄā§‡āĻ•ā§āϏ āĻĒā§āϰāĻžāϝāĻŧāχ āĻĻā§āĻŦāĻŋāϗ⧁āĻŖ āωāĻĒāĻ•āĻžāϰ āĻĻ⧇āϝāĻŧ: āĻ—āϤāĻŋ āĻ“ āĻĄā§‡āϟāĻž āϕ⧋āϝāĻŧāĻžāϞāĻŋāϟāĻŋāĨ¤

āϏāĻŽāĻ¸ā§āϝāĻž āĻļ⧁āϰ⧁ āĻšāϝāĻŧ āϝāĻ–āύ “search everywhere” āĻ—ā§‹āĻĒāύ⧇ ILIKE-āĻ āĻĒāϰāĻŋāĻŖāϤ āĻšāϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āϝ⧇āĻŽāύ name ILIKE '%ann%'-āĻ āϞāĻŋāĻĄāĻŋāĻ‚ āĻ“āϝāĻŧāĻžāχāĻ˛ā§āĻĄāĻ•āĻžāĻ°ā§āĻĄ āφāϛ⧇, āϤāĻžāχ PostgreSQL āϏāĻžāϧāĻžāϰāĻŖ B-tree āχāύāĻĄā§‡āĻ•ā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āύāĻžāĨ¤ āĻāϟāĻŋ āĻ…āύ⧇āĻ• āϏāĻžāϰāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇, āĻāĻŦāĻ‚ āĻŸā§‡āĻŦāĻŋāϞ āĻŦāĻžāĻĄāĻŧāϞ⧇ āĻāϟāĻŋ āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽā§‡āϝāĻŧāĻ­āĻžāĻŦ⧇ āϧ⧀āϰ āĻšāϝāĻŧāĨ¤

āĻĒā§āϰāĻŋāĻĢāĻŋāĻ•ā§āϏ āϏāĻžāĻ°ā§āϚ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϝāĻ–āύ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻļ⧁āϰ⧁āϤ⧇ āĻ…ā§āϝāĻžāĻ‚āĻ•āĻ°ā§āĻĄ: name ILIKE 'ann%'āĨ¤ āϤāĻŦ⧁āĻ“ āĻŦāĻŋāĻŦāϰāĻŖ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ (collation, āϕ⧇āϏ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻŋāĻ‚, āĻāĻŦāĻ‚ āφāĻĒāύāĻŋ āϝ⧇ āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύāϟāĻŋ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻ•āϰāϛ⧇āύ āϏ⧇āϟāĻžāϰ āωāĻĒāϰ āχāύāĻĄā§‡āĻ•ā§āϏ āφāϛ⧇ āĻ•āĻŋ āύāĻž)āĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ UI āϕ⧇āϏ-āχāύāϏ⧇āύāϏāĻŋāϟāĻŋāĻ­ āĻšāϤ⧇ āϚāĻžāϝāĻŧ, āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĒāĻĻā§āϧāϤāĻŋ āĻšāϞ⧋ lower(name) āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻāĻ•āχ āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύ⧇ āχāύāĻĄā§‡āĻ•ā§āϏ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāĨ¤

āĻāϟāĻžāĻ“ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇ āĻ āĻŋāĻ• āĻ•āϰāĻž āϝ⧇ “snappy” āĻŽāĻžāύ⧇ āϕ⧀:

  • āĻ“āϝāĻŧāĻžāĻ°ā§āĻŽ āĻ•ā§āϝāĻžāĻļ⧇-āϤ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻ•āĻžāĻœā§‡āϰ āϜāĻ¨ā§āϝ ~200 ms āĻŦāĻž āϤāĻžāϰ āĻ•āĻŽ
  • āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āĻ“ āϰ⧇āĻ¨ā§āĻĄāĻžāϰāĻŋāĻ‚ āĻŽāĻŋāϞāĻŋāϝāĻŧ⧇ 1 āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āĻŦ⧇āĻļāĻŋ āύāĻž
  • āϏāĻžāϧāĻžāϰāĻŖ āϏāĻžāĻ°ā§āĻšā§‡āϰ āϜāĻ¨ā§āϝ āĻĻ⧃āĻļā§āϝāĻŽāĻžāύ āϞ⧋āĻĄāĻŋāĻ‚ āĻ¸ā§āĻŸā§‡āϟ āύāĻž āĻĨāĻžāĻ•āĻž

āĻāχ āϞāĻ•ā§āĻˇā§āϝāϗ⧁āϞ⧋ āĻĨāĻžāĻ•āϞ⧇ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āĻ•āϰāĻž āϏāĻšāϜ āĻšāϝāĻŧ āϝ⧇ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āĻ“ āĻĒā§āϰāĻŋāĻĢāĻŋāĻ•ā§āϏ⧇ āφāϟāϕ⧇ āĻĨāĻžāĻ•āĻž āϝāĻžāϝāĻŧ āĻ•āĻŋ āύāĻž, āĻŦāĻž full-text āĻŦāĻž trigram āĻĻāϰāĻ•āĻžāϰ āĻ•āĻŋ āύāĻžāĨ¤

āĻ•āĻ–āύ full-text search āωāĻĒāϝ⧁āĻ•ā§āϤ

āϞ⧋āϕ⧇āϰāĻž āĻ¨ā§āϝāĻžāϚāĻžāϰāĻžāϞ āĻ˛ā§āϝāĻžāĻ™ā§āϗ⧁āϝāĻŧ⧇āϜ āϟāĻžāχāĻĒ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϟāĻŋāϕ⧇ āϏāĻ āĻŋāĻ• āφāχāĻŸā§‡āĻŽ āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāĻžāϰ āφāĻļāĻž āĻ•āĻ°ā§‡â€”āϕ⧇āĻŦāϞ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āĻŽā§āϝāĻžāϚ āύāϝāĻŧ—āϤāĻ–āύ full-text search āĻ­āĻžāϞ⧋ āĻĢāĻŋāϟāĨ¤ āϟāĻŋāĻ•āĻŋāϟ āĻŽā§‡āϏ⧇āϜ, āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āύ⧋āϟ, āϞāĻŽā§āĻŦāĻž āĻŦāĻ°ā§āĻŖāύāĻž, knowledge base āφāĻ°ā§āϟāĻŋāϕ⧇āϞ, āĻ•āϞ āϞāĻ— āĻāϏāĻŦ āωāĻĻāĻžāĻšāϰāĻŖāĨ¤

āĻŦāĻĄāĻŧ āϜāϝāĻŧ āĻšāϞ⧋ āĻ°â€ā§āϝāĻžāĻ‚āĻ•āĻŋāĻ‚āĨ¤ āĻĻā§€āĻ°ā§āϘ āϤāĻžāϞāĻŋāĻ•āĻž āĻĢ⧇āϰāϤ āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āϝ⧇āĻ–āĻžāύ⧇ āϏ⧇āϰāĻž āĻĢāϞāϟāĻŋ āĻĄā§āĻŦ⧇ āĻĨāĻžāϕ⧇, full-text search āϰāĻŋāϞ⧇āϭ⧇āĻ¨ā§āϏ āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāϜāĻžāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞ⧇ āϏ⧇āϟāĻž āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ: āĻ•āĻžāϰ⧋ āωāĻ¤ā§āϤāϰ āĻĻāϰāĻ•āĻžāϰ āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āĻŽāĻ§ā§āϝ⧇, 50 āϏāĻžāϰāĻŋ āĻ¸ā§āĻ•ā§āϝāĻžāύ āĻ•āϰ⧇ āύāϝāĻŧāĨ¤

āωāĻšā§āϚ āĻ¸ā§āϤāϰ⧇ full-text search-āĻāϰ āϤāĻŋāύāϟāĻŋ āĻ…āĻ‚āĻļ āφāϛ⧇:

  • āĻāĻ•āϟāĻŋ tsvector (āϏāĻžāĻ°ā§āϚāϝ⧋āĻ—ā§āϝ āĻŸā§‡āĻ•ā§āϏāϟ, āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāĻž āĻŦāĻž āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāĻž)
  • āĻāĻ•āϟāĻŋ tsquery (āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϝāĻž āϟāĻžāχāĻĒ āĻ•āϰ⧇āϛ⧇, āĻ•ā§ā§Ÿā§‡āϰāĻŋāϤ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰāĻŋāϤ)
  • āĻāĻ•āϟāĻŋ āĻ­āĻžāώāĻž āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ (āϕ⧀āĻ­āĻžāĻŦ⧇ āĻļāĻŦā§āĻĻāϗ⧁āϞ⧋ āύāĻ°ā§āĻŽāĻžāϞāĻžāχāϜ āĻšāϝāĻŧ)

āĻ­āĻžāώāĻž āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ⧇āχ āφāϚāϰāĻŖ āĻĻ⧃āĻļā§āϝāĻŽāĻžāύ āĻšāϝāĻŧāĨ¤ PostgreSQL āϏāĻžāϧāĻžāϰāĻŖ stop words (āϝ⧇āĻŽāύ “the”, “and”) āϏāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§‡āĻŽāĻŋāĻ‚ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧇, āϤāĻžāχ “pay”, “paid”, āĻāĻŦāĻ‚ “payment” āĻŽā§āϝāĻžāϚ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāϟāĻŋ āύ⧋āϟ āĻ“ āĻŽā§‡āϏ⧇āĻœā§‡ āĻ­āĻžāϞ⧋, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϛ⧋āϟ āϏāĻžāϧāĻžāϰāĻŖ āĻļāĻŦā§āĻĻ āϖ⧁āρāϜāϞ⧇ āĻ•āĻ–āύāĻ“ āĻŽāĻžāύ⧁āώ āĻ–āĻžāϞāĻŋ āĻĢāϞ āĻĒ⧇āϤ⧇ āĻŦāĻŋāĻ¸ā§āĻŽāĻŋāϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āϏāĻžāχāύ⧋āύāĻŋāĻŽāĻ“ āĻāĻ• āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ⧇āϰ āĻŦāĻŋāώāϝāĻŧāĨ¤ āφāĻĒāύāĻžāϰ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋ āϝāĻ–āύ āĻāĻ•āχ āϜāĻŋāύāĻŋāϏ⧇āϰ āϜāĻ¨ā§āϝ āĻ­āĻŋāĻ¨ā§āύ āĻļāĻŦā§āĻĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ (āωāĻĻāĻžāĻšāϰāĻŖ “refund” āĻŦāύāĻžāĻŽ “chargeback”), āϏ⧇āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϏāĻžāχāύ⧋āύāĻŋāĻŽ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏāĻŽāϝāĻŧ⧇āϰ āϏāĻ™ā§āϗ⧇ āĻāĻ•āϟ⧁ āĻĻ⧇āĻ–āĻ­āĻžāϞ āϞāĻžāϗ⧇āĨ¤ āϏāĻžāχāύ⧋āύāĻŋāĻŽ āϞāĻŋāĻ¸ā§āϟ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āĻāĻŦāĻ‚ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āϰāĻžāϖ⧁āύāĨ¤

āĻĒā§āĻ°ā§āϝāĻžāĻ•āϟāĻŋāĻ•ā§āϝāĻžāϞ āωāĻĻāĻžāĻšāϰāĻŖ: “can’t login after reset” āϏāĻžāĻ°ā§āϚ āĻ•āϰāϞ⧇ āĻāĻŽāύ āϟāĻŋāĻ•āĻŋāϟāϗ⧁āϞ⧋ āωāĻ āĻž āωāϚāĻŋāϤ āϝ⧇āĻ–āĻžāύ⧇ āĻŦāĻžāĻ°ā§āϤāĻžāϝāĻŧ āϞ⧇āĻ–āĻž āφāϛ⧇ “cannot log in after password reset” — āĻļāĻŦā§āĻĻāĻŦāĻŋāĻ¨ā§āϝāĻžāϏ āφāϞāĻžāĻĻāĻž āĻšāϞ⧇āĻ“ āĻĒā§āϰāĻžāϏāĻ™ā§āĻ—āĻŋāĻ• āĻŽāĻŋāϞ āĻĒāĻžāĻ“āϝāĻŧāĻžāĨ¤ āĻāχ āϧāϰāύ⧇āϰ “āĻĒā§āϰāĻžāϏāĻ™ā§āĻ—āĻŋāĻ• āϖ⧁āρāĻœā§‡ āĻĒāĻžāĻ“āϝāĻŧāĻžâ€ āφāϚāϰāĻŖāχ full-text search-āĻāϰ āĻĒā§āϰāϧāĻžāύ āϏ⧁āĻŦāĻŋāϧāĻž āĻāĻŦāĻ‚ āĻāϟāĻŋ ILIKE-āϕ⧇ āϏāĻžāĻ°ā§āϚ āχāĻžā§āϜāĻŋāύ āĻŦāĻžāύāĻžāύ⧋āϰ āĻšā§‡āϝāĻŧ⧇ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻ­āĻžāϞ⧋āĨ¤

āĻ•āĻ–āύ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āχāύāĻĄā§‡āĻ•ā§āϏ āϜāĻŋāϤāĻŦ⧇

Deploy Where You Need
āφāĻĒāύāĻžāϰ āχāĻ¨ā§āϟāĻžāϰāύāĻžāϞ āϟ⧁āϞ AppMaster Cloud-āĻ āĻŦāĻž āφāĻĒāύāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ AWS, Azure, Google Cloud-āĻ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧁āύāĨ¤
āĻāĻ–āύ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧁āύ

āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āχāύāĻĄā§‡āĻ•ā§āϏ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āϝāĻ–āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĢā§āĻ°ā§āϝāĻžāĻ—āĻŽā§‡āĻ¨ā§āϟ āϟāĻžāχāĻĒ āĻ•āϰ⧇, āϟāĻžāχāĻĒā§‹ āĻ•āϰ⧇, āĻŦāĻž āĻļ⧁āϧ⧁ “āĻ•āĻŋāϛ⧁ āĻŽāĻŋāϞ āφāĻ›ā§‡â€ āĻŽāύ⧇ āϰāĻžāϖ⧇āĨ¤ āĻāϗ⧁āϞ⧋ āϛ⧋āϟ āĻŸā§‡āĻ•ā§āϏāϟ āĻĢāĻŋāĻ˛ā§āĻĄā§‡ āωāĻœā§āĻœā§āĻŦāĻ˛â€”āϝ⧇āĻ–āĻžāύ⧇ full-text āϖ⧁āĻŦ āĻ¸ā§āĻŸā§āϰāĻŋāĻ•ā§āϟ: āĻŦā§āϝāĻ•ā§āϤāĻŋāϰ āύāĻžāĻŽ, āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋ āύāĻžāĻŽ, āϟāĻŋāĻ•āĻŋāϟ āϏāĻžāĻŦāĻœā§‡āĻ•ā§āϟ, SKU, āĻ…āĻ°ā§āĻĄāĻžāϰ āύāĻŽā§āĻŦāϰ, āĻĒā§āϰ⧋āĻĄāĻžāĻ•ā§āϟ āϕ⧋āĻĄāĨ¤

āĻāĻ•āϟāĻŋ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āĻšāϞ 3-āĻ•āĻžāϰ⧇āĻ•ā§āϟāĻžāϰ āϚāĻžāĻ™ā§āĻ•āĨ¤ PostgreSQL āĻĻ⧁āϟāĻŋ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻ•āϤāϗ⧁āϞ⧋ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰ⧇ āϤāĻžāϰ āωāĻĒāϰ āϤ⧁āϞāύāĻž āĻ•āϰ⧇āĨ¤ āϤāĻžāχ āĻāϟāĻž āĻŽāĻŋāϞāĻžāϝāĻŧ "Jon Smth" āϕ⧇ "John Smith"-āĻāϰ āϏāĻžāĻĨ⧇, āĻŦāĻž "ACM" āϕ⧇ "ACME"-āĻāϰ āϏāĻžāĻĨ⧇, āĻāĻŦāĻ‚ āϝāĻ–āύ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻļāĻŦā§āĻĻ⧇āϰ āĻŽāĻžāĻāĻ–āĻžāύ⧇āϰ āĻ…āĻ‚āĻļ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻšāϝāĻŧ āϤāĻ–āύāĻ“ āĻĢāϞ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āϝāĻĻāĻŋ āĻ•āĻžāϜāϟāĻŋ “āĻ āĻŋāĻ• āϏ⧇āχ āϏāĻžāϰāĻŋ āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āĻ°â€ āĻšāϝāĻŧ, āĻ•āĻžāĻ—āϜāĻĒāĻ¤ā§āϰ⧇āϰ āĻŦāĻŋāώāϝāĻŧ āύāϝāĻŧ, āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āĻĒā§āϰāĻžāϝāĻŧāχ āĻĻā§āϰ⧁āϤ āĻ“ āϏāĻšāύāĻļā§€āϞ āϏāĻŽāĻžāϧāĻžāύāĨ¤

āϕ⧋āĻĨāĻžāϝāĻŧ āĻāϟāĻŋ full-text āϕ⧇ āĻšāĻžāϰāĻžāϝāĻŧ

Full-text āϞāĻŽā§āĻŦāĻž āĻŸā§‡āĻ•ā§āϏāϟ āĻ“ āĻ…āĻ°ā§āĻĨāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ°â€ā§āϝāĻžāĻ‚āĻ•āĻŋāĻ‚āϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āϚāĻŽā§ŽāĻ•āĻžāϰ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϛ⧋āϟ āĻĢāĻŋāĻ˛ā§āĻĄā§‡ āφāĻ‚āĻļāĻŋāĻ• āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻŦāĻž āϛ⧋āϟ āϟāĻžāχāĻĒā§‹ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰ⧇ āύāĻžāĨ¤ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āϏ⧇āχ āϧāϰāύ⧇āϰ āĻĢāĻžāϜāĻŋāύ⧇āϏ⧇āϰ āϜāĻ¨ā§āϝ āϤ⧈āϰāĻŋāĨ¤

āϞāĻŋāĻ–āĻžāϰ āĻ–āϰāϚ āϝ⧁āĻ•ā§āϤāĻŋāϏāĻ™ā§āĻ—āϤ āϰāĻžāϖ⧁āύ

āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āχāύāĻĄā§‡āĻ•ā§āϏ āĻŦāĻĄāĻŧ āĻāĻŦāĻ‚ āϰāĻžāχāĻŸā§‡ āĻ“āĻ­āĻžāϰāĻšā§‡āĻĄ āĻŦāĻžāĻĄāĻŧāĻžāϝāĻŧ, āϤāĻžāχ āĻŦāĻžāĻ›āĻžāχ āĻ•āϰ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤ āĻāĻŽāύ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋ āχāύāĻĄā§‡āĻ•ā§āϏ āĻ•āϰ⧁āύ āϝ⧇āϗ⧁āϞ⧋ āĻŽāĻžāύ⧁āώ āĻŦāĻžāĻ¸ā§āϤāĻŦ⧇ āϏāĻžāĻ°ā§āϚ āĻŦāĻžāϰ⧇ āϟāĻžāχāĻĒ āĻ•āϰ⧇:

  • Name, email, company, username
  • āϛ⧋āϟ indentifiers (SKU, code, reference)
  • āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āϟāĻžāχāĻŸā§‡āϞ āĻĢāĻŋāĻ˛ā§āĻĄ (āĻŦāĻĄāĻŧ āύ⧋āϟ/āĻ•āĻŽā§‡āĻ¨ā§āϟ āĻĢāĻŋāĻ˛ā§āĻĄ āύāϝāĻŧ)

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϞāĻžāĻŽāϗ⧁āϞ⧋ āύāĻžāĻŽ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϝ⧇āϗ⧁āϞ⧋ āϟāĻŋāĻŽ āϏāĻžāĻ°ā§āϚ āĻŦāĻžāϰ⧇ āϟāĻžāχāĻĒ āĻ•āϰ⧇, āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āχāύāĻĄā§‡āĻ•ā§āϏāĻŋāĻ‚ āϏāĻžāϧāĻžāϰāĻŖāϤ āϛ⧋āϟ āĻ“ āĻĻā§āϰ⧁āϤ āϰāĻžāĻ–āĻž āϝāĻžāϝāĻŧāĨ¤

āĻĒāĻžāĻ°ā§āĻļāĻŋāϝāĻŧāĻžāϞ āχāύāĻĄā§‡āĻ•ā§āϏ — āĻŽāĻžāύ⧁āώ āϝ⧇ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāϗ⧁āϞ⧋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏ⧇āϗ⧁āϞ⧋āχ āĻ•āĻ­āĻžāϰ āĻ•āϰ⧁āύ

Filter First, Then Fuzzy
āĻĢāĻžāϜāĻŋ āϏāĻžāĻ°ā§āϚ āϏāĻ¸ā§āϤāĻž āϰāĻžāĻ–āϤ⧇ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ (āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ, āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻ¸ā§āĻĒ⧇āϏ) āφāϗ⧇ āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤
āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āϝ⧋āĻ— āĻ•āϰ⧁āύ

āĻāĻ•āϟāĻŋ “search everywhere” āĻŦāĻ•ā§āϏ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻ—ā§‹āĻĒāύ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āύāĻŋāϝāĻŧ⧇ āφāϏ⧇āĨ¤ āĻŽāĻžāύ⧁āώ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻ¸ā§āĻĒ⧇āϏ⧇āϰ āĻ­āĻŋāϤāϰ⧇ āϏāĻžāĻ°ā§āϚ āĻ•āϰ⧇, āĻ…ā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­ āφāχāĻŸā§‡āĻŽ āĻĻ⧇āĻ–āĻžāϝāĻŧ, āĻĄāĻŋāϞ⧇āĻŸā§‡āĻĄ āĻŦāĻžāĻĻ āĻĻ⧇āϝāĻŧāĨ¤ āϝāĻĻāĻŋ āĻ“āχ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāϗ⧁āϞ⧋ āĻĒā§āϰāĻžāϝāĻŧ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āĻŸā§‡ āĻĨāĻžāϕ⧇, āϕ⧇āύāύāĻž āĻ•āĻŽāύ āϕ⧇āϏāϕ⧇ āĻĻā§āϰ⧁āϤ āĻ•āϰāϤ⧇ āϏ⧇āχ āϰ⧋āϝāĻŧāϗ⧁āϞ⧋āχ āχāύāĻĄā§‡āĻ•ā§āϏ āĻ•āϰ⧁āύāĨ¤

āĻĒāĻžāĻ°ā§āĻļāĻŋāϝāĻŧāĻžāϞ āχāύāĻĄā§‡āĻ•ā§āϏ āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āύāĻ°ā§āĻŽāĻžāϞ āχāύāĻĄā§‡āĻ•ā§āϏ āϝāĻžāϰ āϏāĻžāĻĨ⧇ WHERE āĻ•ā§āϞāϜ āĻĨāĻžāϕ⧇āĨ¤ PostgreSQL āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āφāĻĒāύāĻžāϰ āĻŽāύāĻ—āĻ āĻŋāϤ āϏāĻžāϰāĻŋāϗ⧁āϞ⧋āϰ āĻāĻ¨ā§āĻŸā§āϰāĻŋ āϰāĻžāϖ⧇, āϤāĻžāχ āχāύāĻĄā§‡āĻ•ā§āϏ āϛ⧋āϟ āĻĨāĻžāϕ⧇āĨ¤ āĻāϰ āĻŽāĻžāύ⧇ āĻ•āĻŽ āĻĒ⧇āϜ āĻĒāĻĄāĻŧāϤ⧇ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻ•ā§āϝāĻžāĻļ āĻšāĻŋāϟ āϰ⧇āϟ āĻ­āĻžāϞ⧋ āĻĨāĻžāϕ⧇āĨ¤

āĻ•āĻŽāύ āĻĒāĻžāĻ°ā§āĻļāĻŋāϝāĻŧāĻžāϞ-āχāύāĻĄā§‡āĻ•ā§āϏ āϟāĻžāĻ°ā§āϗ⧇āϟāϗ⧁āϞ⧋:āĻ…ā§āϝāĻžāĻ•ā§āϟāĻŋāĻ­ āϰ⧋āϝāĻŧ ( status = 'active' ), āϏāĻĢāϟ āĻĄāĻŋāϞāĻŋāϟ (deleted_at IS NULL), āĻŸā§‡āĻ¨ā§āϝāĻžāĻ¨ā§āϟ āĻ¸ā§āϕ⧋āĻĒāĻŋāĻ‚, āĻāĻŦāĻ‚ āϏāĻžāĻŽā§āĻĒā§āϰāϤāĻŋāĻ• āωāχāĻ¨ā§āĻĄā§‹ (āωāĻĻāĻžāĻšāϰāĻŖâ€”āĻļ⧇āώ ⧝ā§Ļ āĻĻāĻŋāύ)āĨ¤

āĻŽā§‚āϞ āĻŦāĻŋāώāϝāĻŧ āĻšāϞ⧋ UI-āϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāϞ āĻ•āϰāĻžāĨ¤ āϝāĻĻāĻŋ āĻ¸ā§āĻ•ā§āϰāĻŋāύ āϏāĻŦāϏāĻŽāϝāĻŧ āĻĄāĻŋāϞ⧇āĻŸā§‡āĻĄ āϏāĻžāϰāĻŋ āĻšāĻžāχāĻĄ āĻ•āϰ⧇, āφāĻĒāύāĻžāϰ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āϏāĻŦāϏāĻŽāϝāĻŧ deleted_at IS NULL āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤ, āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻĒāĻžāĻ°ā§āĻļāĻŋāϝāĻŧāĻžāϞ āχāύāĻĄā§‡āĻ•ā§āϏāĻ“ āĻāĻ•āχ āĻ•āĻ¨ā§āĻĄāĻŋāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤ āϛ⧋āϟ āĻŽāĻŋāϞ āύāĻž āĻĨāĻžāĻ•āĻž, āϝ⧇āĻŽāύ āĻāĻ• āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ is_deleted = false āφāϰ āĻ…āĻ¨ā§āϝ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ deleted_at IS NULL āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇ āĻĒā§āĻ˛ā§āϝāĻžāύāĻžāϰ āχāύāĻĄā§‡āĻ•ā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻŦāĻ¨ā§āϧ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻĒāĻžāĻ°ā§āĻļāĻŋāϝāĻŧāĻžāϞ āχāύāĻĄā§‡āĻ•ā§āϏ full-text āĻ“ trigram āχāύāĻĄā§‡āĻ•ā§āϏ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āύāύ-āĻĄāĻŋāϞ⧇āĻŸā§‡āĻĄ āϰ⧋āϝāĻŧāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āϕ⧇āĻŦāϞ āĻŸā§‡āĻ•ā§āϏāϟ āϏāĻžāĻ°ā§āϚ āχāύāĻĄā§‡āĻ•ā§āϏ āĻ•āϰāĻž āχāύāĻĄā§‡āĻ•ā§āϏ āϏāĻžāχāϜ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāϪ⧇ āϰāĻžāϖ⧇āĨ¤

āĻŸā§āϰ⧇āĻĄ-āĻ…āĻĢ: āĻĒāĻžāĻ°ā§āĻļāĻŋāϝāĻŧāĻžāϞ āχāύāĻĄā§‡āĻ•ā§āϏ āĻŦāĻŋāϰāϞ āĻ•ā§ā§Ÿā§‡āϰāĻŋāϰ āϜāĻ¨ā§āϝ āĻ•āĻŽ āϏāĻšāĻžāϝāĻŧāĻ•āĨ¤ āϕ⧇āω āĻ•āĻ–āύāĻ“ āĻĄāĻŋāϞ⧇āĻŸā§‡āĻĄ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻŦāĻž āϏāĻŦ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻ¸ā§āĻĒ⧇āϏ āϜ⧁āĻĄāĻŧ⧇ āϏāĻžāĻ°ā§āϚ āĻ•āϰāϞ⧇ PostgreSQL āϧ⧀āϰ āĻĒā§āĻ˛ā§āϝāĻžāύ āĻ•āĻžāĻœā§‡ āϞāĻžāĻ—āĻžāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻāĻ•āϟāĻŋ āφāϞāĻžāĻĻāĻž āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ-āĻĒāĻžāĻĨ āϰāĻžāϖ⧁āύ, āĻŦāĻž āĻŦāĻŋāϰāϞ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻšāϞ⧇ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āχāύāĻĄā§‡āĻ•ā§āϏ āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤

āĻĒāĻĻā§āϧāϤāĻŋāϗ⧁āϞ⧋ āĻŽāĻŋāĻļāĻŋāϝāĻŧ⧇ āϏāĻžāĻ°ā§āϚāϕ⧇ āϰāĻšāĻ¸ā§āϝ⧇ āύāĻž āĻĒāϰāĻŋāĻŖāϤ āĻ•āϰāĻž

āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āϟāĻŋāĻŽ āĻŸā§‡āĻ•āύāĻŋāĻ• āĻŽāĻŋāĻļāĻŋāϝāĻŧ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ•āĻžāϰāĻŖ āĻāĻ• āϏāĻžāĻ°ā§āϚ āĻŦāĻ•ā§āϏ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āχāĻ¨ā§āĻŸā§‡āĻ¨ā§āϟ āĻĨāĻžāĻ•āϤ⧇ āĻšāϝāĻŧāĨ¤ āϞāĻ•ā§āĻˇā§āϝ āĻšāϞ⧋ āĻ…āĻĒāĻžāϰ⧇āĻļāύ āĻ…āĻ°ā§āĻĄāĻžāϰ āĻ¸ā§āĻĒāĻˇā§āϟ āϰāĻžāĻ–āĻž āϝāĻžāϤ⧇ āϰ⧇āϜāĻžāĻ˛ā§āϟ āĻĒā§āϰ⧇āĻĄāĻŋāĻ•ā§āĻŸā§‡āĻŦāϞ āϞāĻžāϗ⧇āĨ¤

āĻāĻ•āϟāĻŋ āϏāϰāϞ āĻĒā§āϰāĻžāϝāĻŧā§‹āϰāĻŋāϟāĻŋ āĻ…āĻ°ā§āĻĄāĻžāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āĻ°ā§‡â€”āφāĻĒāύāĻŋ āĻāϟāĻžāϕ⧇ āφāϞāĻžāĻĻāĻž āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻž āĻāĻ•āϟāĻŋ āĻ•ā§ā§Ÿā§‡āϰāĻŋāϤ⧇ CASE āϞāϜāĻŋāĻ• āĻĻāĻŋāϝāĻŧ⧇ āχāĻŽāĻĒā§āϞāĻŋāĻŽā§‡āĻ¨ā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻāĻ•āϟāĻŋ āĻĒā§āϰ⧇āĻĄāĻŋāĻ•ā§āĻŸā§‡āĻŦāϞ āĻĒā§āϰāĻžāϝāĻŧā§‹āϰāĻŋāϟāĻŋ āĻ˛ā§āϝāĻžāĻĄāĻžāϰ

āĻ¸ā§āĻŸā§āϰāĻŋāĻ•ā§āϟ āĻĨ⧇āϕ⧇ āĻĢāĻžāϜāĻŋ āĻĻāĻŋāϕ⧇ āϝāĻžāύ, āϝāϤāĻ•ā§āώāĻŖ āĻĒā§āϰāϝāĻŧā§‹āϜāύ:

  • āĻĒā§āϰāĻĨāĻŽā§‡ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āĻŽā§āϝāĻžāϚ (IDs, email, ticket number, SKU) B-tree āχāύāĻĄā§‡āĻ•ā§āϏ āĻĻāĻŋāϝāĻŧ⧇
  • āϝ⧇āĻ–āĻžāύ⧇ āϝ⧁āĻ•ā§āϤāĻŋāϏāĻ‚āĻ—āϤ āĻĒā§āϰāĻŋāĻĢāĻŋāĻ•ā§āϏ āĻŽā§āϝāĻžāϚ
  • āϤāĻžāϰāĻĒāϰ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āĻŽāĻŋāϞ āϟāĻžāχāĻĒā§‹ āĻ“ āĻĢā§āĻ°ā§āϝāĻžāĻ—āĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ
  • āϏāĻ°ā§āĻŦāĻļ⧇āώ⧇ āϞāĻŽā§āĻŦāĻž āύ⧋āϟ, āĻĄā§‡āϏāĻ•ā§āϰāĻŋāĻĒāĻļāύ āĻāĻŦāĻ‚ āĻĢā§āϰāĻŋ-āĻĢāĻ°ā§āĻŽ āĻ•āύāĻŸā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ full-text

āĻāĻ•āχ āĻ˛ā§āϝāĻžāĻĄāĻžāϰ āĻŽā§‡āύ⧇ āϚāϞāϞ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž āĻŦ⧁āĻāϤ⧇ āĻļāĻŋāĻ–āĻŦ⧇ āĻŦāĻ•ā§āϏ⧇āϰ “āĻ…āĻ°ā§āĻĨ” āϕ⧀āĨ¤ āϤāĻžāϰāĻž āĻ­āĻžāĻŦāĻž āĻŦāĻ¨ā§āϧ āĻ•āϰāĻŦ⧇ āϝ⧇ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āϟ⧁āĻŸā§‡āϛ⧇ āϝāĻ–āύ “12345” āĻāĻ•āϟāĻŋ āϟāĻŋāĻ•āĻŋāϟ āϤāĻžāĻ¤ā§āĻ•ā§āώāĻŖāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻĒāĻžāϝāĻŧ āĻ•āĻŋāĻ¨ā§āϤ⧁ “refund policy” āϞāĻŽā§āĻŦāĻž āĻŸā§‡āĻ•ā§āϏāĻŸā§‡ āĻ–ā§‹āρāϜ āĻ•āϰ⧇āĨ¤

āφāϗ⧇ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ, āϤāĻžāϰāĻĒāϰ āĻĢāĻžāϜāĻŋ

āĻĢāĻžāϜāĻŋ āϏāĻžāĻ°ā§āϚ āϤāĻ–āύāχ āĻŦā§āϝāϝāĻŧāĻŦāĻšā§āϞ āĻšāϝāĻŧ āϝāĻ–āύ āĻāϟāĻŋ āĻĒ⧁āϰ⧋ āĻŸā§‡āĻŦāĻŋāϞ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧇āĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž āϝ⧇ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāϗ⧁āϞ⧋ āĻŦāĻžāĻ¸ā§āϤāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ (status, assigned team, date range, account) āϏ⧇āϗ⧁āϞ⧋ āĻĻāĻŋāϝāĻŧ⧇ āĻ•ā§āϝāĻžāĻ¨ā§āĻĄāĻŋāĻĄā§‡āϟ āϏ⧇āϟ āϏāĻ‚āϕ⧁āϚāĻŋāϤ āĻ•āϰ⧁āύ, āϤāĻžāϰāĻĒāϰ āĻŦāĻžāĻ•āĻŋ āĻ…āĻ‚āĻļ⧇ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āĻŦāĻž full-text āϚāĻžāϞāĻžāύāĨ¤ āĻāĻŽāύāĻ•āĻŋ āĻĻā§āϰ⧁āϤ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āχāύāĻĄā§‡āĻ•ā§āϏāĻ“ āĻŽāĻŋāϞāĻŋāϝāĻŧāύāϗ⧁āϞ⧋ āϰ⧋ āĻ•āύāϏāĻŋāĻĄāĻžāϰ āĻ•āϰāϞ⧇ āϧ⧀āϰ āĻŽāύ⧇ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻāĻ›āĻžāĻĄāĻŧāĻž āĻāĻ•āϜāύ-āĻĒā§āϝāĻžāϰāĻžāĻ—ā§āϰāĻžāĻĢ⧇āϰ āύāĻŋāϝāĻŧāĻŽ āϞ⧇āĻ–āĻž āωāϚāĻŋāϤ āϝāĻžāϤ⧇ āύāύ-āĻŸā§‡āĻ•āύāĻŋāĻ•āĻžāϞ āϏāĻšāĻ•āĻ°ā§āĻŽā§€āϰāĻžāĻ“ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰ⧇, āϝ⧇āĻŽāύ: “āφāĻŽāϰāĻž āĻĒā§āϰāĻĨāĻŽā§‡ āϟāĻŋāĻ•āĻŋāϟ āύāĻŽā§āĻŦāϰ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āĻŽā§āϝāĻžāϚ āĻ•āϰāĻŋ, āϤāĻžāϰāĻĒāϰ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āύāĻžāĻŽ āϟāĻžāχāĻĒā§‹ āϏāĻšā§āϝ āĻ•āϰ⧇ āĻŽāĻŋāϞāĻžāχ, āϤāĻžāϰāĻĒāϰ āύ⧋āϟ āϏāĻžāĻ°ā§āϚ āĻ•āϰāĻŋāĨ¤â€ āĻāχ āĻļ⧇āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĄā§‡āĻĢāĻŋāύāĻŋāĻļāύ āĻĒāϰ⧇ āĻŦāĻŋāϰ⧋āϧ āϠ⧇āĻ•āĻžāϝāĻŧ āϕ⧇āύ āϕ⧋āύ⧋ āϏāĻžāϰāĻŋ āĻĻ⧇āĻ–āĻžāϝāĻŧ āϤāĻžāϰ āĻ“āĻĒāϰāĨ¤

āϧāĻžāĻĒ⧇ āϧāĻžāĻĒ⧇: āĻĒāĻĻā§āϧāϤāĻŋ āĻŦ⧇āϛ⧇ āύāĻŋāϝāĻŧ⧇ āύāĻŋāϰāĻžāĻĒāĻĻ⧇ āχāĻŽāĻĒā§āϞāĻŋāĻŽā§‡āĻ¨ā§āϟ āĻ•āϰ⧁āύ

Ship a Real Admin Panel
āĻāĻ•āϟāĻŋ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻŦāĻž āĻ…āĻĒāϏ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻĒā§āϝāĻžāύ⧇āϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āϝāĻž āĻĻā§āϰ⧁āϤ āϟāĻŋāĻ•āĻŋāϟ, āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āĻāĻŦāĻ‚ āύ⧋āϟ āϖ⧁āρāĻœā§‡ āĻĒāĻžāϝāĻŧāĨ¤
āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻ…ā§āϝāĻžāĻĒ āĻŦāĻžāύāĻžāύ

āĻĻā§āϰ⧁āϤ “search everywhere” āĻŦāĻ•ā§āϏāϟāĻŋ āϛ⧋āϟ āϛ⧋āϟ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ⧇āϰ āϏ⧇āϟāĨ¤ āĻĒā§āϰāĻĨāĻŽā§‡ āϏ⧇āϗ⧁āϞ⧋ āϞāĻŋāϖ⧇ āύāĻŋāύ, āϤāĻžāϰāĻĒāϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻ•āĻžāϜ āϏāĻšāϜ āĻšāϝāĻŧāĨ¤

  1. Define the inputs. āĻāϟāĻž āĻ•āĻŋ āϕ⧇āĻŦāϞ āĻāĻ•āϟāĻŋ āĻŦāĻ•ā§āϏ, āύāĻž āĻŦāĻ•ā§āϏ + āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ (status, owner, date range)?
  2. āĻ•ā§āώ⧇āĻ¤ā§āϰ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻŽā§āϝāĻžāϚ āϟāĻžāχāĻĒ āĻ āĻŋāĻ• āĻ•āϰ⧁āύ. IDs āĻ“ āϕ⧋āĻĄ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āϚāĻžāύāĨ¤ āύāĻžāĻŽ āĻ“ āχāĻŽā§‡āχāϞ āĻĒā§āϰāĻžāϝāĻŧāχ āĻĒā§āϰāĻŋāĻĢāĻŋāĻ•ā§āϏ āĻŦāĻž āĻĢāĻžāϜāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤ āϞāĻŽā§āĻŦāĻž āύ⧋āϟ āĻ“ āĻĄāĻŋāϏāĻ•ā§āϰāĻŋāĻĒāĻļāύ āĻ¨ā§āϝāĻžāϚāĻžāϰāĻžāϞ āĻ˛ā§āϝāĻžāĻ™ā§āϗ⧁āϝāĻŧ⧇āϜ āϏāĻžāĻ°ā§āĻšā§‡ āĻ­āĻžāϞ⧋āĨ¤
  3. āϏāĻ āĻŋāĻ• āχāύāĻĄā§‡āĻ•ā§āϏ āϝ⧋āĻ— āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ āϏ⧇āϗ⧁āϞ⧋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāĻšā§āϛ⧇āĨ¤ āχāύāĻĄā§‡āĻ•ā§āϏ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ, āϤāĻžāϰāĻĒāϰ āφāĻĒāύāĻžāϰ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āύāĻŋāϝāĻŧ⧇ EXPLAIN (ANALYZE, BUFFERS) āϚāĻžāϞāĻžāύāĨ¤
  4. āχāĻšā§āĻ›āĻž āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻ°â€Œā§āϝāĻžāĻ™ā§āĻ•āĻŋāĻ‚ āĻŦāĻž āϏāĻ°ā§āϟāĻŋāĻ‚ āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤ āϝāĻĻāĻŋ āχāωāϜāĻžāϰ “invoice 1042” āϟāĻžāχāĻĒ āĻ•āϰ⧇, āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āĻŽā§āϝāĻžāϚ āωāĻĒāϰ⧇ āωāĻ āĻž āωāϚāĻŋāϤāĨ¤ āϝāĻĻāĻŋ āϕ⧇āω āĻŽāĻŋāϏāĻ¸ā§āĻĒ⧇āϞāĻĄ āύāĻžāĻŽ āϟāĻžāχāĻĒ āĻ•āϰ⧇, similarity āĻ°â€Œā§āϝāĻžāĻ™ā§āĻ•āĻŋāĻ‚ āĻŦāĻŋāϜāϝāĻŧā§€ āĻšāĻ“āϝāĻŧāĻž āωāϚāĻŋāϤāĨ¤
  5. āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āύāĻŋāϝāĻŧ⧇ āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰ⧁āύ: āϟāĻžāχāĻĒā§‹, āϖ⧁āĻŦ āϛ⧋āϟ āϟāĻžāĻ°ā§āĻŽ (āϝ⧇āĻŽāύ “al”), āϞāĻŽā§āĻŦāĻž āĻĒ⧇āĻ¸ā§āĻŸā§‡āĻĄ āĻŸā§‡āĻ•ā§āϏāϟ, āĻ–āĻžāϞāĻŋ āχāύāĻĒ⧁āϟ, āĻāĻŦāĻ‚ “āĻļ⧁āϧ⧁ āĻĢāĻŋāĻ˛ā§āϟāĻžāĻ°â€ āĻŽā§‹āĻĄāĨ¤

āύāĻŋāϰāĻžāĻĒāĻĻāĻ­āĻžāĻŦ⧇ āĻļāĻŋāĻĒ āĻ•āϰāϤ⧇ āĻāĻ•āĻŦāĻžāϰ⧇ āĻāĻ•āϟāĻžāχ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āϰ⧋āϞāĻŦā§āϝāĻžāĻ• āϏāĻšāϜ āϰāĻžāϖ⧁āύāĨ¤ āĻŦāĻĄāĻŧ āĻŸā§‡āĻŦāĻŋāϞ⧇ āύāϤ⧁āύ āχāύāĻĄā§‡āĻ•ā§āϏ⧇āϰ āϜāĻ¨ā§āϝ CREATE INDEX CONCURRENTLY āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āϰāĻžāχāϟ āĻŦā§āϞāĻ• āύāĻž āĻšāϝāĻŧāĨ¤ āϝāĻĻāĻŋ āĻĒāĻžāϰ⧇āύ, āĻĢāĻŋāϚāĻžāϰ āĻĢā§āĻ˛ā§āϝāĻžāϗ⧇āϰ āĻĒāĻŋāĻ›āύ⧇ āĻļāĻŋāĻĒ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻ˛ā§āϝāĻžāĻŸā§‡āĻ¨ā§āϏāĻŋ āφāϗ⧇ āĻ“ āĻĒāϰ⧇ āϤ⧁āϞāύāĻž āĻ•āϰ⧁āύāĨ¤

“PostgreSQL search everywhere” āĻāϰ āĻāĻ•āϟāĻŋ āĻŦāĻžāϝāĻŧāĻŦā§€āϝāĻŧ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ: āĻĒā§āϰāĻĨāĻŽā§‡ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āĻŽā§āϝāĻžāϚ (āĻĻā§āϰ⧁āϤ āĻ“ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ), āĻŽāĻžāύ⧁āώ⧇āϰ āĻĢāĻŋāĻ˛ā§āĻĄā§‡ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āĻŽā§āϝāĻžāϚ (āϟāĻžāχāĻĒā§‹ āϏāĻšā§āϝ āĻ•āϰ⧇), āφāϰ āϞāĻŽā§āĻŦāĻž āĻŸā§‡āĻ•ā§āϏāĻŸā§‡āϰ āϜāĻ¨ā§āϝ full-text search (āĻ°â€ā§āϝāĻžāĻ‚āĻ•āĻŋāĻ‚āϝāĻŧ⧇āϰ āϏ⧁āĻŦāĻŋāϧāĻž)āĨ¤

āĻŦāĻžāĻ¸ā§āϤāĻŦ āωāĻĻāĻžāĻšāϰāĻŖ: āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻĒā§āϝāĻžāύ⧇āϞ⧇ āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āϚ āĻŦāĻ•ā§āϏ

āĻāĻ•āϟāĻŋ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻĒā§āϝāĻžāύ⧇āϞ āĻ•āĻ˛ā§āĻĒāύāĻž āĻ•āϰ⧁āύ āϝ⧇āĻ–āĻžāύ⧇ āϟāĻŋāĻŽ āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āϚ āĻŦāĻ•ā§āϏ āϚāĻžāύ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϤāĻžāϰāĻž āφāĻļāĻž āĻ•āϰ⧇ āĻāϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ, āϟāĻŋāĻ•āĻŋāϟ, āĻāĻŽāύāĻ•āĻŋ āύ⧋āϟāĻ“ āϖ⧁āρāĻœā§‡ āĻĒāĻžāĻŦ⧇āĨ¤ āĻāϟāĻŋ “āĻāĻ• āχāύāĻĒ⧁āϟ, āĻŦāĻšā§ āĻ…āĻ°ā§āĻĨ” āϏāĻŽāĻ¸ā§āϝāĻžāϰ āĻ•ā§āϞāĻžāϏāĻŋāĻ• āωāĻĻāĻžāĻšāϰāĻŖāĨ¤

āĻĒā§āϰāĻĨāĻŽ āϜāϝāĻŧ āĻšāϞ⧋ āχāĻ¨ā§āĻŸā§‡āĻ¨ā§āϟ āĻĻ⧃āĻļā§āϝāĻŽāĻžāύ āĻ•āϰāĻž āĻ›āĻžāĻĄāĻŧāĻžāχ āϘāĻž āĻ•āϰāĻžāĨ¤ āϝāĻĻāĻŋ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻāĻ•āϟāĻŋ āχāĻŽā§‡āχāϞ āĻŦāĻž āĻĢā§‹āύ āύāĻŽā§āĻŦāϰ⧇āϰ āĻŽāϤ āĻŽāύ⧇ āĻšāϝāĻŧ, āĻāϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āϞ⧁āĻ•āφāĻĒ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŸā§āϰāĻŋāϟ āĻ•āϰ⧁āύāĨ¤ āϝāĻĻāĻŋ āĻāϟāĻŋ āϟāĻŋāĻ•āĻŋāϟ āφāχāĻĄāĻŋāϰ āĻŽāϤ⧋ āϞāĻžāϗ⧇ (āωāĻĻāĻžāĻšāϰāĻŖ, TKT-10482), āϏāϰāĻžāϏāϰāĻŋ āϟāĻŋāĻ•āĻŋāϟāĻ¸ā§ āĻĒāĻĨ⧇ āϰāĻžāωāϟ āĻ•āϰ⧁āύāĨ¤ āĻŦāĻžāĻ•āĻŋ āϏāĻŦāĻ•āĻŋāϛ⧁ āϟāĻŋāĻ•āĻŋāϟ āϏāĻžāĻŦāĻœā§‡āĻ•ā§āϟ āĻ“ āύ⧋āϟ āϜ⧁āĻĄāĻŧ⧇ āĻŸā§‡āĻ•ā§āϏāϟ āϏāĻžāĻ°ā§āĻšā§‡ fallbackāĨ¤

āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āϞ⧁āĻ•āφāĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āχāύāĻĄā§‡āĻ•ā§āϏ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻ­āĻžāϞ⧋ āϞāĻžāϗ⧇āĨ¤ āύāĻžāĻŽ āĻ“ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āϗ⧁āϞāĻž āĻāĻžāĻŽā§‡āϞāĻžāĻĒā§‚āĻ°ā§āĻŖ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĢā§āĻ°ā§āϝāĻžāĻ—āĻŽā§‡āĻ¨ā§āϟ āϟāĻžāχāĻĒ āĻ•āĻ°ā§‡â€”āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ “jon smi” āĻŦāĻž “acm” āĻŽāϤ⧋ āϏāĻžāĻ°ā§āϚ āĻĻā§āϰ⧁āϤ āĻāĻŦāĻ‚ āϏāĻšāύāĻļā§€āϞ āĻ•āϰ⧇āĨ¤

āϟāĻŋāĻ•āĻŋāϟ āύ⧋āϟāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ full-text search āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤ āύ⧋āϟāϗ⧁āϞ⧋ āĻĒā§āϰāĻ•ā§ƒāϤ āĻŦāĻžāĻ•ā§āϝ āĻāĻŦāĻ‚ āφāĻĒāύāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻĒā§āϰāĻžāϏāĻ™ā§āĻ—āĻŋāĻ• āĻŽāĻŋāϞ āϚāĻžāύ, āύāĻž “āĻāχ āϏāĻžāĻŦāĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āφāĻ›ā§‡â€ āϟāĻžāχāĻĒ⧇āϰ āĻĢāϞāĨ¤ āϝāĻ–āύ āĻāĻ•āχ āϕ⧀āĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻŦāĻšā§ āϟāĻŋāĻ•āĻŋāĻŸā§‡ āφāϏ⧇, āĻ°â€ā§āϝāĻžāĻ‚āĻ•āĻŋāĻ‚ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇ āϏ⧇āϰāĻž āĻŽāĻŋāϞ āωāĻĒāϰ⧇ āφāύāϤ⧇āĨ¤

āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāϗ⧁āϞ⧋ āĻŦ⧇āĻļā§€ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āϝ⧇āϟāĻž āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āϟāĻŋāĻŽ āĻ…āύ⧁āĻŽāĻžāύ āĻ•āϰ⧇ āύāĻžāĨ¤ āϝāĻĻāĻŋ āĻāĻœā§‡āĻ¨ā§āϟāϰāĻž “open tickets”-āĻ āĻŦāĻžāϏ āĻ•āϰ⧇, āĻāĻ•āϟāĻŋ partial index āϝ⧋āĻ— āĻ•āϰ⧁āύ āϝāĻž āϕ⧇āĻŦāϞ open rows āĻ•āĻ­āĻžāϰ āĻ•āϰ⧇āĨ¤ āĻāĻ•āχāĻ­āĻžāĻŦ⧇ “active customers”-āĻāϰ āϜāĻ¨ā§āϝ āĻ•āϰ⧁āύāĨ¤ āĻāϟāĻŋ āχāύāĻĄā§‡āĻ•ā§āϏ āϛ⧋āϟ āϰāĻžāϖ⧇ āĻāĻŦāĻ‚ āĻ•āĻŽāύ āĻĒāĻžāĻĨ āĻĻā§āϰ⧁āϤ āĻ•āϰ⧇āĨ¤

āϖ⧁āĻŦ āϛ⧋āϟ āĻ•ā§ā§Ÿā§‡āϰāĻŋāϰ āύāĻŋāϝāĻŧāĻŽ āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤ, āύāϤ⧁āĻŦāĻž āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻ…āύ⧇āĻ• āĻŦā§āϝāϝāĻŧāĻŦāĻšā§āϞ āĻ•āĻžāϜ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻšāĻŦ⧇:

  • 1–2 āĻ•ā§āϝāĻžāϰ⧇āĻ•ā§āϟāĻžāϰ: āϰāĻŋāϏ⧇āĻ¨ā§āϟ āĻ“āĻĒ⧇āύ āϟāĻŋāĻ•āĻŋāϟ āĻ“ āϰāĻŋāϏ⧇āĻ¨ā§āϟāϞāĻŋ āφāĻĒāĻĄā§‡āϟ āĻšāĻ“āϝāĻŧāĻž āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āĻĻ⧇āĻ–āĻžāύ
  • 3+ āĻ•ā§āϝāĻžāϰ⧇āĻ•ā§āϟāĻžāϰ: āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āĻĢāĻŋāĻ˛ā§āĻĄā§‡ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āϚāĻžāϞāĻžāύ āĻāĻŦāĻ‚ āϟāĻŋāĻ•āĻŋāϟ āĻŸā§‡āĻ•ā§āϏāĻŸā§‡āϰ āϜāĻ¨ā§āϝ full-text āϚāĻžāϞāĻžāύ
  • āĻ¸ā§āĻĒāĻˇā§āϟ āχāĻ¨ā§āĻŸā§‡āĻ¨ā§āϟ āύāĻž āĻĨāĻžāĻ•āϞ⧇: āĻāĻ•āϟāĻŋ āĻŽāĻŋāĻ•ā§āϏāĻĄ āϞāĻŋāĻ¸ā§āϟ āĻĻ⧇āĻ–āĻžāύ, āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ—ā§āϰ⧁āĻĒ āϕ⧇āĻĒ āĻ•āϰ⧁āύ (āωāĻĻāĻžāĻšāϰāĻŖ: 10 āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āĻ“ 10 āϟāĻŋāĻ•āĻŋāϟ)

āϏāĻžāϧāĻžāϰāĻŖ āϭ⧁āϞāϗ⧁āϞ⧋ āϝ⧇āϗ⧁āϞ⧋ āϏāĻžāĻ°ā§āϚ āϧ⧀āϰ āĻŦāĻž āĻŦāĻŋāĻ­ā§āϰāĻžāĻ¨ā§āϤ āĻ•āϰ⧇

Avoid Search Tech Debt
āϏāĻžāĻ°ā§āϚ āϚāĻžāĻšāĻŋāĻĻāĻž āĻŦāĻĻāϞāĻžāϞ⧇ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ-āϰ⧇āĻĄāĻŋ āϏ⧋āĻ°ā§āϏ āϕ⧋āĻĄ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧇ āĻŸā§‡āĻ• āĻĄā§‡āĻ­āĻŸā§‡āĻĄ āĻāĻĄāĻŧāĻžāύāĨ¤
āϕ⧋āĻĄ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧁āύ

āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ “āϕ⧇āύ āϏāĻžāĻ°ā§āϚ āϧ⧀āϰ?” āĻŦāĻžāĻ— āύāĻŋāĻœā§‡-āχ āϏ⧃āĻˇā§āϟāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āϞāĻ•ā§āĻˇā§āϝ āχāύāĻĄā§‡āĻ•ā§āϏ āϏāĻŦāĻ•āĻŋāϛ⧁ āύāϝāĻŧ, āĻŦāϰāĻ‚ āϤāĻžāϰāĻž āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏ⧇āϟāĻžāχ āχāύāĻĄā§‡āĻ•ā§āϏ āĻ•āϰāĻžāĨ¤

āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĢāĻžāρāĻĻ āĻšāϞ⧋ āĻ…āύ⧇āĻ• āĻ•āϞāĻžāĻŽā§‡ āχāύāĻĄā§‡āĻ•ā§āϏ āϝ⧋āĻ— āĻ•āϰāĻž “āĻšāϝāĻŧāϤ⧋ āĻ•āĻžāĻœā§‡ āϞāĻžāĻ—āĻŦā§‡â€ āĻ­āĻžāĻŦ⧇āχāĨ¤ āĻĒāĻĄāĻŧāĻž āĻ­āĻžāϞ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒā§āϰāϤāĻŋāϟāĻŋ āχāύāϏāĻžāĻ°ā§āϟ āĻāĻŦāĻ‚ āφāĻĒāĻĄā§‡āĻŸā§‡ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ•āĻžāϜ āϝ⧋āĻ— āĻšāϝāĻŧāĨ¤ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞ āϝ⧇āĻ–āĻžāύ⧇ āϰ⧇āĻ•āĻ°ā§āĻĄ āϏāĻžāϰāĻžāĻĻāĻŋāύ āĻŦāĻĻāϞ⧇ (āϟāĻŋāĻ•āĻŋāϟ, āĻ…āĻ°ā§āĻĄāĻžāϰ, āχāωāϜāĻžāϰ), āϏ⧇āĻ–āĻžāύ⧇ āϰāĻžāχāϟ āĻ¸ā§āĻĒāĻŋāĻĄ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤

āφāϰ⧇āĻ•āϟāĻŋ āϭ⧁āϞ āĻšāϞ⧋ full-text āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āĻ–āĻžāύ⧇ āĻĒā§āϰāĻ•ā§ƒāϤ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύāĻžāĻŽ āĻŦāĻž āχāĻŽā§‡āχāϞ⧇ āϟāĻžāχāĻĒā§‹-āϏāĻšāύāĻļā§€āϞ āϞ⧁āĻ•āφāĻĒāĨ¤ Full-text āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āϟ āĻ“ āĻĄāĻŋāϏāĻ•ā§āϰāĻŋāĻĒāĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āϚāĻŽā§ŽāĻ•āĻžāϰ; āĻāϟāĻž “Jon” āĻŦāύāĻžāĻŽ “John” āĻŦāĻž “gmail.con” āĻŦāύāĻžāĻŽ “gmail.com” āĻāϰ āĻŽāϤ⧋ āϟāĻžāχāĻĒā§‹-āϟāϞāĻžāĻ°ā§āϝāĻžāĻ¨ā§āϟ āĻ…āĻŸā§‹āĻ•āĻŽāĻĒāϞāĻŋāϟ āύāϝāĻŧ—āϏ⧇āϟāĻž āϏāĻžāϧāĻžāϰāĻŖāϤ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽā§‡āϰ āĻ•āĻžāϜāĨ¤

āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāĻ“ āύāĻŋāσāĻļāĻŦā§āĻĻ⧇ āφāĻĒāύāĻžāϰ āĻĒā§āĻ˛ā§āϝāĻžāύ āϭ⧇āϙ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝāĻĻāĻŋ āĻ…āύ⧇āĻ• āϏāĻžāĻ°ā§āϚ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻĻāĻŋāϝāĻŧ⧇ āϘāĻŸā§‡ (āϝ⧇āĻŽāύ status = 'open' āĻŦāĻž org_id = 42), āĻļā§āϰ⧇āĻˇā§āĻ  āχāύāĻĄā§‡āĻ•ā§āϏāϟāĻŋ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻŋ partial index āϝāĻž āĻ“āχ āĻ•āĻ¨ā§āĻĄāĻŋāĻļāύ āĻŽā§‡āϞ⧇āĨ¤ āϭ⧁āϞ⧇ āϗ⧇āϞ⧇ PostgreSQL āĻ…āύ⧇āĻ• āĻŦ⧇āĻļāĻŋ āϏāĻžāϰāĻŋ āĻ¸ā§āĻ•ā§āϝāĻžāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻŦāĻžāϰāĻŦāĻžāϰ āĻĻ⧇āĻ–āĻž āϭ⧁āϞ:

  • āĻĒāϰāĻŋāĻŽāĻžāĻĒ āύāĻž āĻ•āϰ⧇ āĻ…āύ⧇āĻ• āχāύāĻĄā§‡āĻ•ā§āϏ āϝ⧋āĻ— āĻ•āϰāĻž, āĻĢāϞ⧇ āϰāĻžāχāϟ āĻ•āĻ¸ā§āϟ āĻŦāĻžāĻĄāĻŧ⧇
  • full-text āϕ⧇ āϟāĻžāχāĻĒā§‹-āϟāϞāĻžāĻ°ā§āϝāĻžāĻ¨ā§āϟ āĻ…āĻŸā§‹āĻ•āĻŽāĻĒāϞāĻŋāϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āφāĻļāĻž āĻ•āϰāĻž
  • āĻ•āĻŽāύ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āϕ⧀āĻ­āĻžāĻŦ⧇ āχāύāĻĄā§‡āĻ•ā§āϏ āĻĒā§āϰāĻ­āĻžāĻŦāĻŋāϤ āĻ•āϰ⧇ āϤāĻž āωāĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻž
  • āϛ⧋āϟ, āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻĄāĻžāϟāĻžāϰ āωāĻĒāϰ āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻŦāĻžāĻ¸ā§āϤāĻŦ āϟāĻžāĻ°ā§āĻŽ āĻĢā§āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¨ā§āϏāĻŋ āύāĻž āĻĻ⧇āĻ–āĻž
  • āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻ•āϞāĻžāĻŽā§‡ āϏ⧋āĻ°ā§āϟ āĻ•āϰāĻž āϝ⧇āϟāĻžāϰ āϏāĻžāĻĨ⧇ āϕ⧋āύ āχāύāĻĄā§‡āĻ•ā§āϏ āύ⧇āχ, āĻĢāϞ⧇ āϧ⧀āϰ āϏ⧋āĻ°ā§āϟ āĻšāĻ“āϝāĻŧāĻž

āωāĻĻāĻžāĻšāϰāĻŖ: āĻāĻ•āϟāĻŋ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ¸ā§āĻ•ā§āϰāĻŋāύ āϟāĻŋāĻ•āĻŋāϟ āϏāĻžāĻ°ā§āϚ āĻ•āϰ⧇ āϏāĻžāĻŦāĻœā§‡āĻ•ā§āϟ, āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āύāĻžāĻŽ, āϟāĻŋāĻ•āĻŋāϟ āύāĻŽā§āĻŦāϰ āĻĻāĻŋāϝāĻŧ⧇, āϤāĻžāϰāĻĒāϰ āϏāĻ°ā§āĻŦāĻļ⧇āώ activity āĻĻā§āĻŦāĻžāϰāĻž āϏāĻ°ā§āϟ āĻ•āϰ⧇āĨ¤ āϝāĻĻāĻŋ latest_activity_at āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāĻĄ āϏ⧇āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āχāύāĻĄā§‡āĻ•ā§āϏ āύāĻž āĻĨāĻžāϕ⧇ (āωāĻĻāĻžāĻšāϰāĻŖ, āĻ“āĻĒ⧇āύ āϟāĻŋāĻ•āĻŋāĻŸā§‡āϰ āϜāĻ¨ā§āϝ), āϏ⧇āχ āϏ⧋āĻ°ā§āϟ āφāĻĒāύāĻžāϰ āϏāĻžāĻ°ā§āϚ āχāύāĻĄā§‡āĻ•ā§āϏ āĻĨ⧇āϕ⧇ āĻĒāĻžāĻ“ā§ŸāĻž āĻ—āϤāĻŋ āύāĻˇā§āϟ āĻ•āϰ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻļāĻŋāĻĒ āĻ•āϰāĻžāϰ āφāϗ⧇ āĻĻā§āϰ⧁āϤ āĻšā§‡āĻ•āϞāĻŋāĻ¸ā§āϟ

Build Search-First Internal Tools
PostgreSQL āĻŽāĻĄā§‡āϞ, āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻāĻŦāĻ‚ predictable āϰ⧇āϜāĻžāĻ˛ā§āϟ āύāĻŋāϝāĻŧ⧇ āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āϚ-āĻĢāĻžāĻ°ā§āĻ¸ā§āϟ āχāĻ¨ā§āϟāĻžāϰāύāĻžāϞ āĻ¸ā§āĻ•ā§āϰāĻŋāύ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤
AppMaster āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύ

“Search everywhere” āĻĢāĻŋāϚāĻžāϰ āϏāĻŽā§āĻĒāĻ¨ā§āύ āĻļā§āĻŦāĻžāĻļāϰ āφāϗ⧇ āφāϚāϰāĻŖ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ¸ā§āĻĒāĻˇā§āϟ āĻšā§‹āύ:

  • āĻŽāĻžāύ⧁āώ āĻ•āĻŋ āϰ⧇āĻ•āĻ°ā§āĻĄ āϖ⧁āρāϜāϛ⧇ āĻāĻ•āϟāĻŋ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āφāχāĻĄā§‡āĻ¨ā§āϟāĻŋāĻĢāĻžāϝāĻŧāĻžāϰ āĻĻāĻŋāϝāĻŧ⧇ (āϟāĻŋāĻ•āĻŋāϟ āύāĻŽā§āĻŦāϰ, āχāĻŽā§‡āχāϞ)?
  • āϤāĻžāϰāĻž āϟāĻžāχāĻĒā§‹-āϏāĻšāύāĻļā§€āϞ āĻŽāĻŋāϞ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻž āĻ•āϰ⧇ āĻ•āĻŋ?
  • āϤāĻžāϰāĻž āϞāĻŽā§āĻŦāĻž āύ⧋āϟ āĻ“ āĻĄāĻŋāϏāĻ•ā§āϰāĻŋāĻĒāĻļāύ⧇āϰ āĻ°â€ā§āϝāĻžāĻ‚āĻ•āĻĄ āϰ⧇āϜāĻžāĻ˛ā§āϟ āϚāĻžāϝāĻŧ āĻ•āĻŋ?

āĻŽā§‹āĻĄ āĻŽāĻŋāĻļāĻžāϞ⧇ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāύ āϕ⧋āύāϟāĻŋ āϜāĻŋāϤāĻŦ⧇ āϝāĻ–āύ āĻ•āύāĻĢā§āϞāĻŋāĻ•ā§āϟ āĻšāĻŦ⧇āĨ¤

āϤāĻžāϰāĻĒāϰ 2–3 āϟāĻŋ āĻĢāĻŋāĻ˛ā§āĻĄ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰ⧁āύ āϝ⧇āϗ⧁āϞ⧋ āĻŦ⧇āĻļāĻŋ āϏāĻžāĻ°ā§āϚ āϚāĻžāϞāĻžāϝāĻŧāĨ¤ āϝāĻĻāĻŋ 80% āϏāĻžāĻ°ā§āϚ āĻšāϝāĻŧ āχāĻŽā§‡āχāϞ, āύāĻžāĻŽ, āϟāĻŋāĻ•āĻŋāϟ ID āĻĻā§āĻŦāĻžāϰāĻž, āϏ⧇āϗ⧁āϞ⧋ āφāϗ⧇ āĻ…āĻĒāϟāĻŋāĻŽāĻžāχāϜ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻŦāĻžāĻ•āĻŋ āϏāĻŦ āϏ⧇āϕ⧇āĻ¨ā§āĻĄāĻžāϰāĻŋ āĻ­āĻžāĻŦ⧁āύāĨ¤

āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻĒā§āϰāĻŋ-āĻļāĻŋāĻĒ āĻšā§‡āĻ•āϞāĻŋāĻ¸ā§āϟ:

  • āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĢāĻŋāĻ˛ā§āĻĄā§‡āϰ āĻŽā§‚āϞ āĻŽā§āϝāĻžāϚ āĻŽā§‹āĻĄ āĻ•āύāĻĢāĻžāĻ°ā§āĻŽ āĻ•āϰ⧁āύ (exact lookup, fuzzy match, āĻŦāĻž ranked text)
  • āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāĻ“āϝāĻŧāĻž āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāϗ⧁āϞ⧋ āϞāĻŋāĻ¸ā§āϟ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ āχāύāĻĄā§‡āĻ•ā§āϏāϗ⧁āϞ⧋ āϐ āĻ•āĻŽā§āĻŦāĻŋāύ⧇āĻļāύ āĻŽā§‡āϞ⧇
  • āϖ⧁āĻŦ āϛ⧋āϟ āĻ“ āĻ–āĻžāϞāĻŋ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāĻŦ⧇āύ āĻ āĻŋāĻ• āĻ•āϰ⧁āύ (āωāĻĻāĻžāĻšāϰāĻŖ: fuzzy search-āĻ 2–3 āĻ•ā§āϝāĻžāϰ⧇āĻ•ā§āϟāĻžāϰ āĻĻāϰāĻ•āĻžāϰ; āĻ–āĻžāϞāĻŋ āĻšāϞ⧇ “recent” āĻĻ⧇āĻ–āĻžāύ⧋)
  • āĻ…āĻ°ā§āĻĄāĻžāϰāĻŋāĻ‚ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻŦ⧇āύ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύ: āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻžāĻŽā§āĻĒā§āϰāϤāĻŋāĻ•, āϏ⧇āϰāĻž āĻŸā§‡āĻ•ā§āϏāϟ āĻŽā§āϝāĻžāϚ, āĻŦāĻž āĻāĻ•āϟāĻŋ āϏāϰāϞ āĻ•āĻŽā§āĻŦāĻžāχāύāĻĄ āϰ⧁āϞ

āĻ…āĻŦāĻļ⧇āώ⧇, āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻĄā§‡āϟāĻž āφāĻ•āĻžāϰ āĻ“ āϟāĻžāχāĻŽāĻŋāĻ‚ āĻĻāĻŋāϝāĻŧ⧇ āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰ⧁āύ, āĻļ⧁āϧ⧁ āϏāĻ āĻŋāĻ•āϤāĻž āύāϝāĻŧāĨ¤ 1,000 āϏāĻžāϰāĻŋ āĻĻāĻŋāϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ āĻŽāύ⧇ āĻšāĻ“āϝāĻŧāĻž āĻ•ā§ā§Ÿā§‡āϰāĻŋ 1,000,000 āϏāĻžāϰāĻŋ āĻšāϞ⧇ āϧ⧀āϰ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϧāĻžāĻĒ: āĻĒā§āĻ˛ā§āϝāĻžāύāϕ⧇ āĻĻā§āϰ⧁āϤ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϏāĻžāĻ°ā§āϚ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āϰ⧂āĻĒ āĻĻāĻŋāύ

āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āϚ āĻŦāĻ•ā§āϏ āϤāĻ–āύāχ āĻĻā§āϰ⧁āϤ āĻĨāĻžāϕ⧇ āϝāĻ–āύ āϟāĻŋāĻŽ āĻāĻ•āĻŽāϤ āĻĨāĻžāϕ⧇ āĻāϟāĻŋ āϕ⧀ āĻ•āϰāĻŦ⧇āĨ¤ āϏāĻžāϧāĻžāϰāĻŖ āĻ­āĻžāώāĻžāϝāĻŧ āύāĻŋāϝāĻŧāĻŽāϗ⧁āϞ⧋ āϞāĻŋāϖ⧇ āϰāĻžāϖ⧁āύ: “āĻŽā§āϝāĻžāĻšâ€ āϕ⧀ (exact, prefix, typo-tolerant), āϕ⧋āύ āĻĢāĻŋāĻ˛ā§āĻĄ āϏāĻžāĻ°ā§āϚ āĻšāĻŦ⧇, āĻāĻŦāĻ‚ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āϰ⧇āϜāĻžāĻ˛ā§āϟ āϏ⧇āϟ āĻŦāĻĻāϞ⧇ āĻĻ⧇āĻŦ⧇āĨ¤

āĻāĻ•āϟāĻŋ āϛ⧋āϟ āϰāĻŋāϝāĻŧ⧇āϞ āϏāĻžāĻ°ā§āϚ āĻŸā§‡āĻ¸ā§āϟ āϏ⧇āϟ āϰāĻžāϖ⧁āύ āĻāĻŦāĻ‚ āĻāϟāĻžāϕ⧇ āϰāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻ¸ā§āϝ⧁āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤ ā§§ā§Ļâ€“ā§¨ā§Ļ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āϝāĻĨ⧇āĻˇā§āϟ: āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āύāĻžāĻŽ, āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āφāĻ‚āĻļāĻŋāĻ• āχāĻŽā§‡āχāϞ, āĻāĻ•āϟāĻŋ āϟāĻžāχāĻĒā§‹, āĻāĻ•āϟāĻŋ āϞāĻŽā§āĻŦāĻž āύ⧋āϟ āĻ¸ā§āύāĻŋāĻĒ⧇āϟ, āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ “āĻĢāϞāĻžāĻĢāϞ āύ⧇āĻ‡â€ āϕ⧇āϏāĨ¤ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āφāϗ⧇ āĻ“ āĻĒāϰ⧇ āĻāϗ⧁āϞ⧋ āϚāĻžāϞāĻžāύ āϝāĻžāϤ⧇ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āĻ•āĻžāϜ āχāϰ relevance āύāĻˇā§āϟ āύāĻž āĻ•āϰ⧇āĨ¤

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ AppMaster (appmaster.io) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϟ⧁āϞ āϤ⧈āϰāĻŋ āĻ•āϰāϛ⧇āύ, āϏāĻžāĻ°ā§āϚ āύāĻŋāϝāĻŧāĻŽāϗ⧁āϞ⧋ āĻĄā§‡āϟāĻž āĻŽāĻĄā§‡āϞ āĻ“ āĻŦā§āϝāĻŦāϏāĻžāϝāĻŧāĻŋāĻ• āϞāϜāĻŋāϕ⧇āϰ āĻĒāĻžāĻļ⧇ āĻĄāĻŋāĻĢāĻžāχāύ āĻ•āϰāϞ⧇ UI āφāϚāϰāĻŖ āĻ“ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĒāĻ›āĻ¨ā§āĻĻ āĻŦāĻĻāϞ⧇ āϝāĻžāϝāĻŧ āύāĻžāĨ¤

āĻĒā§āϰāĻļā§āύ⧋āĻ¤ā§āϤāϰ

āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϟāĻžāϰāύāĻžāϞ āϟ⧁āϞ⧇ “search everywhere” āϏāĻžāϧāĻžāϰāĻŖāϤ āϕ⧀ āĻŦā§‹āĻāĻžāϝāĻŧ?

āĻāϟāĻŋ āĻŦā§‹āĻāĻžāύ⧋ āωāϚāĻŋāϤ: “āφāĻŽāĻŋ āϝ⧇āχ āϰ⧇āĻ•āĻ°ā§āĻĄāϟāĻž āĻ­āĻžāĻŦāĻ›āĻŋ, āϏ⧇āϟāĻž āĻĻā§āϰ⧁āϤ āϖ⧁āρāĻœā§‡ āĻĒāĻžāĻ“āĨ¤â€ āĻŦā§āϰāĻžāωāϜ āĻ•āϰāĻž āύāϝāĻŧāĨ¤ āφāϗ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āφāϏāϞ āχāĻ¨ā§āĻŸā§‡āĻ¨ā§āϟ (ID lookup, āύāĻžāĻŽ/āχāĻŽā§‡āχāϞ āϟāĻžāχāĻĒ āĻ•āϰ⧇ āϟāĻžāχāĻĒā§‹āĻ—ā§āϰāĻžāĻĢāĻŋ āϏāĻš āĻ–ā§‹āρāϜāĻž, āĻŦāĻĄāĻŧ āύ⧋āϟ āϏāĻžāĻ°ā§āϚ) āĻ“ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāϗ⧁āϞ⧋ āϞāĻŋāϖ⧇ āύāĻŋāύāĨ¤ āĻāχ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤāϗ⧁āϞ⧋ āωāχāϚ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āϚāĻžāϞāĻžāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϕ⧋āύ āχāύāĻĄā§‡āĻ•ā§āϏ āĻĻāϰāĻ•āĻžāϰ āϤāĻž āĻŦāϞ⧇ āĻĻ⧇āĻŦ⧇āĨ¤

āϕ⧇āύ `ILIKE '%...%'` āϏāĻžāĻ°ā§āϚ āϧ⧀āϰ āĻ•āϰ⧇?

ILIKE '%term%'-āĻ āϞāĻŋāĻĄāĻŋāĻ‚ āĻ“āϝāĻŧāĻžāχāĻ˛ā§āĻĄāĻ•āĻžāĻ°ā§āĻĄ āĻĨāĻžāϕ⧇, āϤāĻžāχ PostgreSQL āϏāĻžāϧāĻžāϰāĻŖ B-tree āχāύāĻĄā§‡āĻ•ā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āύāĻž āĻāĻŦāĻ‚ āĻŦāĻšā§ āϏāĻžāϰāĻŋ āĻ¸ā§āĻ•ā§āϝāĻžāύ āĻ•āϰ⧇āĨ¤ āϛ⧋āϟ āĻŸā§‡āĻŦāĻŋāϞ⧇ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻĻ⧇āĻ–āĻžāϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĄāĻžāϟāĻž āĻŦāĻžāĻĄāĻŧāϞ⧇ āĻĻā§āϰ⧁āϤ āϧ⧀āϰ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤ āϏāĻžāĻŦāĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻŦāĻž āϟāĻžāχāĻĒā§‹-āϏāĻš āĻŽā§āϝāĻžāϚāĻŋāĻ‚ āĻĻāϰāĻ•āĻžāϰ āĻšāϞ⧇ ILIKE-āĻāϰ āĻŦāĻĻāϞ⧇ trigram āĻŦāĻž full-text āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻžāϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āĻ•āϰ⧁āύāĨ¤

IDs āĻŦāĻž āχāĻŽā§‡āχāϞāϗ⧁āϞ⧋āϰ āĻŽāϤ⧋ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āϞ⧁āĻ•āφāĻĒ⧇āϰ āĻĻā§āϰ⧁āϤ āĻĒāĻĻā§āϧāϤāĻŋ āϕ⧀?

āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āĻ•āĻŽā§āĻĒā§āϝāĻžāϰāĻŋāϏāύ⧇āϰ āĻŽāϤ⧋ WHERE id = $1 āĻŦāĻž WHERE email = $1 āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻāϗ⧁āϞ⧋āϕ⧇ B-tree (āĻ…ften āχāĻŽā§‡āχāϞ⧇āϰ āϜāĻ¨ā§āϝ unique) āχāύāĻĄā§‡āĻ•ā§āϏ āĻĻāĻŋāϝāĻŧ⧇ āĻŦā§āϝāĻžāĻ• āĻ•āϰ⧁āύāĨ¤ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ āϞ⧁āĻ•āφāĻĒ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻ¸ā§āϤāĻž āϏāĻžāĻ°ā§āϚ āĻāĻŦāĻ‚ āĻĢāϞāĻžāĻĢāϞāĻ“ predictable āĻ•āϰ⧇āĨ¤ āϝāĻĻāĻŋ āχāωāϜāĻžāϰ āĻĢ⧁āϞ āϟāĻŋāĻ•āĻŋāϟ āύāĻžāĻŽā§āĻŦāĻžāϰ āĻŦāĻž āχāĻŽā§‡āχāϞ āĻĒ⧇āĻ¸ā§āϟ āĻ•āϰ⧇, āĻĒā§āϰāĻĨāĻŽā§‡āχ āĻāχ āĻĒāĻĨāϟāĻŋ āϰāĻžāωāϟ āĻ•āϰ⧁āύāĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āϕ⧇āϏ-āχāύāϏ⧇āύāϏāĻŋāϟāĻŋāĻ­ āĻĒā§āϰāĻŋāĻĢāĻŋāĻ•ā§āϏ āϏāĻžāĻ°ā§āϚ āĻ•āϰāĻŦ⧇āύ āϝāĻžāϤ⧇ āχāύāĻĄā§‡āĻ•ā§āϏ āĻ­āĻžāϙ⧇ āύāĻž?

āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύāϟāĻŋ āĻļ⧁āϰ⧁āϤ⧇ āĻ…ā§āϝāĻžāĻ™ā§āĻ•āĻ°ā§āĻĄ āĻ•āϰāϞ⧇ prefix āϏāĻžāĻ°ā§āϚ āĻ•āĻžāϜ āĻ•āϰ⧇: āωāĻĻāĻžāĻšāϰāĻŖ name ILIKE 'ann%'āĨ¤ āϕ⧇āϏ-āχāύāϏ⧇āύāϏāĻŋāϟāĻŋāĻ­ āϰāĻžāĻ–āĻžāϰ āϜāĻ¨ā§āϝ āĻ…āύ⧇āĻ• āϟāĻŋāĻŽ lower(name) āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāĻ•āχ āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύ⧇ āχāύāĻĄā§‡āĻ•ā§āϏ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āϝāĻžāϤ⧇ āĻĒā§āĻ˛ā§āϝāĻžāύāĻžāϰ āϏ⧇āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝāĻĻāĻŋ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻļ⧁āϰ⧁āϤ⧇ āĻ…ā§āϝāĻžāĻ™ā§āĻ•āϰ āύāĻž āĻĨāĻžāϕ⧇, prefix āϏāĻžāĻ°ā§āϚ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇ āύāĻžāĨ¤

āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āϚ āĻŦāĻ•ā§āϏ⧇ āĻ•āĻ–āύ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āχāύāĻĄā§‡āĻ•ā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āωāϚāĻŋāϤ?

āϝāĻ–āύ āχāωāϜāĻžāϰ āĻĢā§āĻ°ā§āϝāĻžāĻ—āĻŽā§‡āĻ¨ā§āϟ āϟāĻžāχāĻĒ āĻ•āϰ⧇, āϛ⧋āϟ āϟāĻžāχāĻĒā§‹ āĻ•āϰ⧇ āĻŦāĻž āϕ⧇āĻŦāϞāχ ‘āĻ•āĻŋāϛ⧁ āĻŽāĻŋāϞ⧇ āϝāĻžāϝāĻŧ’ āĻŽāύ⧇ āĻĨāĻžāĻ•ā§‡â€”āĻŦāĻŋāĻļ⧇āώāϤ āϛ⧋āϟ āĻĢāĻŋāĻ˛ā§āĻĄā§‡ (āύāĻžāĻŽ, āϏāĻžāĻŦāĻœā§‡āĻ•ā§āϟ, āϕ⧋āĻĄ)—āϤāĻ–āύ trigram āχāύāĻĄā§‡āĻ•ā§āϏ āϖ⧁āĻŦ āĻ•āĻžāĻ°ā§āϝāĻ•āϰāĨ¤ āĻāϟāĻŋ āĻŽāĻŋāĻĄāϞ-āĻ…āĻĢ-āĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻŽā§āϝāĻžāϚ āĻāĻŦāĻ‚ āύāĻŋāϝāĻŧāĻžāϰ-āĻŽā§āϝāĻžāϚ āϟāĻžāχāĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻ­āĻžāϞāĨ¤ āϤāĻŦ⧇ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āχāύāĻĄā§‡āĻ•ā§āϏ āĻŦāĻĄāĻŧ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āϰāĻžāχāϟ-āĻ“āĻ­āĻžāϰāĻšā§‡āĻĄ āĻŦāĻžāĻĄāĻŧāĻžāϝāĻŧ, āϤāĻžāχ āϕ⧇āĻŦāϞ āϏ⧇āχ āĻ•āϞāĻžāĻŽāϗ⧁āϞāĻŋāϤ⧇āχ āϞāĻžāĻ—āĻžāύ āϝ⧇āϗ⧁āϞ⧋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āĻ•āĻ–āύ PostgreSQL full-text āϏāĻžāĻ°ā§āϚ āĻ­āĻžāϞ⧋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ?

Full-text āϏāĻžāĻ°ā§āϚ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻ–āύ āĻŽāĻžāύ⧁āώ āĻŦāĻžāĻ•ā§āϝ āĻŦāĻž āϕ⧀āĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϞāĻŋāϖ⧇ āϞāĻŽā§āĻŦāĻž āĻ•āύāĻŸā§‡āĻ¨ā§āϟ (āύ⧋āϟ, āĻŽā§‡āϏ⧇āϜ, āĻĄāĻŋāϏāĻ•ā§āϰāĻŋāĻĒāĻļāύ, knowledge-base) āϏāĻžāĻ°ā§āϚ āĻ•āϰ⧇ āĻāĻŦāĻ‚ relevance āĻ°â€ā§āϝāĻžāĻ‚āĻ•āĻŋāĻ‚ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻž āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻ¸ā§āĻŸā§‡āĻŽāĻŋāĻ‚ āĻ“ āĻ¸ā§āϟāĻĒ-āĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϰāĻŋāĻŽā§āĻ­āĻžāϞ āĻ•āϰ⧇, āϝāĻž āĻĒā§āϰ⧋āϏ⧇ āĻ­āĻžāϞ⧋ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϖ⧁āĻŦ āϛ⧋āϟ āϏāĻžāϧāĻžāϰāĻŖ āĻļāĻŦā§āĻĻ āϏāĻžāĻ°ā§āĻšā§‡ āϏāĻŦāϏāĻŽāϝāĻŧ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āĻĢāϞ āύāĻžāĻ“ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦ⧇ partial indexes “search everywhere” āĻ¸ā§āĻ•ā§āϰāĻŋāύāϗ⧁āϞ⧋āϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇?

āϝāĻ–āύ āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻāĻ•āχ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ (āϝ⧇āĻŽāύ deleted_at IS NULL, status = 'open', āĻŦāĻž tenant constraint), āϤāĻ–āύ partial index āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤ āχāύāĻĄā§‡āĻ•ā§āϏāϟāĻŋ āϕ⧇āĻŦāϞ āϏāĻžāϧāĻžāϰāĻŖ subset āĻ•āĻ­āĻžāϰ āĻ•āϰāĻžāϝāĻŧ āϛ⧋āϟ āĻĨāĻžāϕ⧇ āĻāĻŦāĻ‚ āϰāĻŋāϝāĻŧ⧇āϞ-āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āϞ⧋āĻĄā§‡ āĻĻā§āϰ⧁āϤ āĻšāϝāĻŧāĨ¤ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ āφāĻĒāύāĻžāϰ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻ āĻŋāĻ• āĻāĻ•āχ āĻ•āĻ¨ā§āĻĄāĻŋāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āύāϤ⧁āĻŦāĻž PostgreSQL āχāύāĻĄā§‡āĻ•ā§āϏāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻžāĻ“ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āφāĻŽāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ, āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āĻ“ āĻĢ⧁āϞ-āĻŸā§‡āĻ•ā§āϏāϟ āĻŽāĻŋāϞāĻŋāϝāĻŧ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻŦāĻŋāĻ­ā§āϰāĻžāĻ¨ā§āϤ āύāĻž āĻ•āϰāĻŦā§‹?

āĻāĻ•āϟāĻŋ āĻ•āύāϏāĻŋāĻ¸ā§āĻŸā§‡āĻ¨ā§āϟ priority ladder āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āϰ⧇āϜāĻžāĻ˛ā§āϟ āĻĒā§āϰ⧇āĻĄāĻŋāĻ•ā§āĻŸā§‡āĻŦāϞ āϞāĻžāϗ⧇: āĻĒā§āϰāĻĨāĻŽā§‡ āĻāĻ•ā§āϏāĻžāĻ•ā§āϟ (ID/āχāĻŽā§‡āχāϞ), āϤāĻžāϰāĻĒāϰ āĻĒā§āϰāĻŋāĻĢāĻŋāĻ•ā§āϏ āϝ⧇āĻ–āĻžāύ⧇ āĻĒā§āϰāĻžāϏāĻ™ā§āĻ—āĻŋāĻ•, āĻāϰāĻĒāϰ āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āύāĻžāĻŽ/āϟāĻžāχāĻŸā§‡āϞ-āĻ āĻĢāĻžāϜāĻŋ āĻŽā§āϝāĻžāϚ, āĻāĻŦāĻ‚ āϞāĻŽā§āĻŦāĻž āύ⧋āĻŸā§‡āϰ āϜāĻ¨ā§āϝ full-textāĨ¤ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āφāϗ⧇ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧁āύ āϝ⧇āύ āĻĢāĻžāϜāĻŋ āϏāĻžāĻ°ā§āϚāϕ⧇ āĻĒ⧁āϰ⧋ āĻŸā§‡āĻŦāĻŋāϞ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰāϤ⧇ āύāĻž āĻšāϝāĻŧāĨ¤

1–2 āĻ•ā§āϝāĻžāϰ⧇āĻ•ā§āϟāĻžāϰ⧇āϰ āϏāĻžāĻ°ā§āϚ āĻŦāĻž āĻ–āĻžāϞāĻŋ āχāύāĻĒ⧁āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āϕ⧀ āĻ•āϰāĻž āωāϚāĻŋāϤ?

ā§§â€“ā§¨ āĻ•ā§āϝāĻžāϰ⧇āĻ•ā§āϟāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻĢāĻžāϜāĻŋ āϏāĻžāĻ°ā§āϚ āϚāĻžāϞāĻžāύ⧋ āĻŦā§āϝāϝāĻŧāĻŦāĻšā§āϞ āĻ“ āĻļāĻŦā§āĻĻ-āĻ‰ā§ŽāĻĒāĻžāĻĻāĻ• āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϏāĻžāϧāĻžāϰāĻŖ āύāĻŋāϝāĻŧāĻŽ āϰāĻžāϖ⧁āĻ¨â€”āωāĻĻāĻžāĻšāϰāĻŖ: 3+ āĻ•ā§āϝāĻžāϰ⧇āĻ•ā§āϟāĻžāϰ āĻšāϞ⧇ āĻĢāĻžāϜāĻŋ āϚāĻžāϞāĻžāύ, āφāϰ āϛ⧋āϟ āχāύāĻĒ⧁āĻŸā§‡ āϰāĻŋāϏ⧇āĻ¨ā§āϟ āĻŦāĻž āĻĢā§āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¨ā§āϟ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻĻ⧇āĻ–āĻžāύāĨ¤ āĻ–āĻžāϞāĻŋ āχāύāĻĒ⧁āĻŸā§‡ “match everything” āύāĻž āϚāĻžāϞāĻŋāϝāĻŧ⧇, āĻ•āύāϏāĻžāχāϏ āϰāĻŋāĻ•ā§āϏāĻžāĻ˛ā§āϟ āĻĻ⧇āĻ–āĻžāύāĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āϝāĻžāϚāĻžāχ āĻ•āϰ⧇ āύāĻŋāϰāĻžāĻĒāĻĻ⧇ āϏāĻžāĻ°ā§āϚ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻļāĻŋāĻĒ āĻ•āϰāĻŦā§‹?

āχāύāĻĄā§‡āĻ•ā§āϏ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āϤāĻžāϰāĻĒāϰ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āύāĻŋāϝāĻŧ⧇ EXPLAIN (ANALYZE, BUFFERS) āϚāĻžāϞāĻžāĻ¨â€”āĻĄā§‡āĻ­ āĻĄāĻžāϟāĻžāϏ⧇āĻŸā§‡ āύāϝāĻŧ, āϰāĻŋ⧟āĻžāϞāĻŋāĻ¸ā§āϟāĻŋāĻ• āĻĄāĻžāϟāĻž āϏāĻžāχāĻœā§‡āĨ¤ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞ⧋ āĻāĻ•āϟāĻŋāĻŽāĻžāĻ¤ā§āϰ āϏāĻŽāϝāĻŧ⧇ āϰ⧋āϞ āφāωāϟ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻŦāĻĄāĻŧ āĻŸā§‡āĻŦāĻŋāϞ⧇ āύāϤ⧁āύ āχāύāĻĄā§‡āĻ•ā§āϏ CREATE INDEX CONCURRENTLY āĻĻāĻŋāϝāĻŧ⧇ āĻŦāĻžāύāĻžāύ āϝāĻžāϤ⧇ āϰāĻžāχāϟ āĻŦā§āϞāĻ• āύāĻž āĻšāϝāĻŧāĨ¤ āϝāĻĻāĻŋ AppMaster (appmaster.io) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧇āύ, āϏāĻžāĻ°ā§āϚ āύāĻŋ⧟āĻŽāϗ⧁āϞ⧋ āĻĄā§‡āϟāĻž āĻŽāĻĄā§‡āϞ⧇āϰ āĻ•āĻžāϛ⧇ āĻĄāĻŋāĻĢāĻžāχāύ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ UI āφāϚāϰāĻŖ āĻ“ DB āϚāϝāĻŧ⧇āϏ āφāϞāĻžāĻĻāĻž āύāĻž āĻšāϝāĻŧāĨ¤

āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϏāĻšāϜ
āĻ•āĻŋāϛ⧁ āφāĻļā§āϚāĻ°ā§āϝāϜāύāĻ•āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇āϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āϏāĻš āĻ…ā§āϝāĻžāĻĒāĻŽāĻžāĻ¸ā§āϟāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύāĨ¤
āφāĻĒāύāĻŋ āϝāĻ–āύ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻšāĻŦ⧇āύ āϤāĻ–āύ āφāĻĒāύāĻŋ āϏāĻ āĻŋāĻ• āϏāĻĻāĻ¸ā§āϝāϤāĻž āĻŦ⧇āϛ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎

āĻāĻŦāĻžāϰ āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϝāĻžāĻ•
PostgreSQL āϏāĻžāĻ°ā§āϚ āϏāĻ°ā§āĻŦāĻ¤ā§āϰ: āĻĢ⧁āϞ-āĻŸā§‡āĻ•ā§āϏāϟ, āĻŸā§āϰāĻžāχāĻ—ā§āϰāĻžāĻŽ āĻ“ āĻĒāĻžāĻ°ā§āĻļāĻŋāϝāĻŧāĻžāϞ āχāύāĻĄā§‡āĻ•ā§āϏ | AppMaster